1

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

1,2,NULL
1,2,NULL

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

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

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

4

1 回答 1

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

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

于 2013-04-14T18:34:00.383 回答