空值不是唯一的

Dia*_*nto 6 database postgresql null

我在postgres上有这样的行:

 name | address | college 

 john | rome    |
 john | rome    |
 max  | tokyo   |
Run Code Online (Sandbox Code Playgroud)

我创建一个这样的表:

create test (
name    varchar(10),
address varchar(20),
college varchar(20),
constraint test_uq unique (name,address,college);
Run Code Online (Sandbox Code Playgroud)

如何使空值变为唯一,因此输出可以是这样的:

 name | address | college 

 john | rome    |
 max  | tokyo   |
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 2

Postgres 文档声称此行为符合 SQL 标准:

通常,当表中有两行或更多行且约束中包含的所有列的值相等时,就会违反唯一约束。但是,在此比较中,两个空值不被视为相等。这意味着即使存在唯一约束,也可以在至少一个受约束列中存储包含空值的重复行。此行为符合 SQL 标准[.]

一种可能性是重新考虑您的模式(老实说,唯一性约束name+address+college在您的示例中没有多大意义)。