Postgresql 如何在列中有一个唯一的值,而其他值不是唯一的?

Postgresql 如何在列中有一个唯一的值,而其他值不是唯一的?,postgresql,constraints,Postgresql,Constraints,我有一个表,其中有一列名为force_display。此列的长度为1个字符,采用Y或N。 我希望能够输入任意多的N,但有一个约束,其中Y只能在该表中存在一次。是否有人知道如何实现这一点,或者这是不可能的?使用部分唯一索引是可能的: create unique index uidx on tablename(force_display) where force_display='Y'; 非常感谢你。我甚至没有想过尝试这个,可能是因为我不知道where子句可以用于索引创建。再次感谢您是否可以在此基

我有一个表,其中有一列名为force_display。此列的长度为1个字符,采用Y或N。
我希望能够输入任意多的N,但有一个约束,其中Y只能在该表中存在一次。是否有人知道如何实现这一点,或者这是不可能的?

使用部分唯一索引是可能的:

create unique index uidx on tablename(force_display) where force_display='Y';

非常感谢你。我甚至没有想过尝试这个,可能是因为我不知道where子句可以用于索引创建。再次感谢您是否可以在此基础上进行扩展并创建一个索引,例如保持Y的数量不超过3?@Crouzilles:不,我认为基于索引的技术无法强制执行
N
最大行数,其中
N>1
@Crouzilles您需要一个触发器
锁定表,然后计数,我想。不过,要小心锁升级死锁的风险。谢谢大家提供的额外信息,非常感谢。当做