当PostgreSQL中的给定列与谓词匹配时,请考虑行是唯一的
问题描述:
在唯一性约束的上下文中,如果给定列具有特定值(例如“false”),有没有办法将行视为唯一。当PostgreSQL中的给定列与谓词匹配时,请考虑行是唯一的
举个例子,
这将被允许:
id | user| location| active
----+-----+----------+----------
1 | 1 | West LA | f
2 | 1 | West LA | f
3 | 1 | West LA | t
4 | 2 | West LA | t
但这并不:
id | user| location| active
----+-----+----------+----------
1 | 1 | West LA | f
2 | 1 | West LA | t
3 | 1 | West LA | t
4 | 2 | West LA | t
要做到这一点,我想知道这是否是可能的做出与此类似的唯一性约束:UNIQUE(user, location)
但只适用它WHERE active = true
答
你几乎没有 - 创建一个部分(又名“过滤”)唯一索引:
create unique index on the_table (day, location)
where active;
请你提供数据的样本,可以共存和行会给出一个例外的样本.. –
@VaoTsun没问题!希望现在更清楚。 – jpswain
是的 - 谢谢。我还没有得到一天的起源,但你可能只是不列出所有列?无论如何,你已经有答案了。 –