This question already has answers here:
Create unique constraint with null columns
(4个答案)
四年前关闭。
在PostgreSQL中,我希望有一个多列唯一约束,其中一列可以恰好为空一次。
到目前为止我所做的:
其中
基本上,我只允许一个条目匹配
这将确保对于
(4个答案)
四年前关闭。
在PostgreSQL中,我希望有一个多列唯一约束,其中一列可以恰好为空一次。
到目前为止我所做的:
ALTER TABLE customexternalemail
ADD CONSTRAINT customexternalemail_sp_emaildomain_unique
UNIQUE(serviceproviderid, emailprefix, emaildomainid);
其中
serviceproviderid
和emaildomainid
是BIGINT,emailprefix
是TEXT。emaildomainid
是唯一允许为空的列,也是我遇到问题的列。基本上,我只允许一个条目匹配
serviceproviderid
、emailprefix
和emaildomainid
的组合,其中emaildomainid
可以是BIGINT值或NULL。当前(具有上述约束),如果emaildomainid
为空,则它将接受repeats,但如果emaildomainid
不为空,则它必须是唯一的。 最佳答案
您可以创建两个partial indexes。自2002年2月发布的version 7.2以来,它们得到了支持。
当emaildomainid
不为空时,此项将检查三列的任何组合是否唯一:
CREATE UNIQUE INDEX customexternalemail_sp_emaildomain_unique_not_null
ON customexternalemail (serviceproviderid, emailprefix, emaildomainid)
WHERE emaildomainid IS NOT NULL;
这将确保对于
emaildomainid
具有空值的任何行,组合(serviceproviderid, emailprefix)
将是唯一的:CREATE UNIQUE INDEX customexternalemail_sp_emaildomain_unique_null
ON customexternalemail (serviceproviderid, emailprefix)
WHERE emaildomainid IS NULL;
关于postgresql - 唯一约束,其中NULL是一个有效值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29039506/
10-11 17:26