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

时间:2013-04-14 18:18:55

标签: postgresql unique-constraint unique-index

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

1,2,NULL
1,2,NULL

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

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

有没有理由这样做?也许我的psql实验和我的测试实验之间存在另一个区别。

1 个答案:

答案 0 :(得分:2)

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

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

显示不允许的实验。