Postgresql 具有空值的多列唯一索引在多个连接上的行为

Postgresql 具有空值的多列唯一索引在多个连接上的行为,postgresql,unique-constraint,unique-index,Postgresql,Unique Constraint,Unique Index,我在postgresql中有一个多列唯一索引。有时这些列值中的一个将为NULL,我希望唯一索引将NULL视为另一个值。因此,这两行是不允许的: 1,2,NULL 1,2,NULL 在psql上做简单的实验,这正是我看到的行为 但我有一个压力测试,我使用20个线程执行20个并发插入。这里,Postgres允许插入相同的行 发生这种情况有什么原因吗?也许我的PSQL实验和我的测试实验有另外的区别。 < P>一个独特的索引将考虑不同的NULL,所以这些值可以被插入: create table t (

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

1,2,NULL
1,2,NULL
在psql上做简单的实验,这正是我看到的行为

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


发生这种情况有什么原因吗?也许我的PSQL实验和我的测试实验有另外的区别。

< P>一个独特的索引将考虑不同的NULL,所以这些值可以被插入:

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

显示不允许的实验。

可能是gah的重复,该死,是我的
ActiveRecord
验证阻止了它。不确定我在测试中怎么会错过这个明显的东西(特别是因为我认为我是在明确地单独测试它们)。好的,谢谢!我将执行双索引解决方案@dondimichaelstroma链接到