【问题标题】:behavior of multi-column unique indexes with NULL values over multiple connections多个连接上具有 NULL 值的多列唯​​一索引的行为
【发布时间】:2013-04-14 18:18:55
【问题描述】:

我在 postgresql 中有一个多列唯一索引。有时这些列值之一将为 NULL,我希望唯一索引将 NULL 视为另一个值。所以这两行是不允许的:

1,2,NULL
1,2,NULL

在psql做简单的实验,这正是我看到的行为。

但是我有一个压力测试,我使用 20 个线程执行 20 个并发插入。在这里,Postgres 允许插入相同的行。

发生这种情况有什么原因吗?也许我的 psql 实验和我的 test 实验还有另一个区别。

【问题讨论】:

标签: postgresql unique-constraint unique-index


【解决方案1】:

唯一索引会将空值视为不同,因此可以插入这些值:

create table t (a int, b int, c int, unique (a, b, c));
insert into t (a, b, c) values
(1, 2, null),
(1, 2, null);
INSERT 0 2

展示你的实验是不允许的。

【讨论】:

  • 呸,弗拉克,是我的ActiveRecord 验证阻止了它。不知道我是如何在我的测试中错过了这个明显的事情(特别是因为我认为我是在单独测试它们)。好的谢谢!我会做双索引解决方案@dondimichaelstroma 链接到
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2016-07-19
  • 2011-05-28
  • 2014-03-05
  • 2021-11-24
  • 2022-01-10
相关资源
最近更新 更多