当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

+0

请你提供数据的样本,可以共存和行会给出一个例外的样本.. –

+1

@VaoTsun没问题!希望现在更清楚。 – jpswain

+1

是的 - 谢谢。我还没有得到一天的起源,但你可能只是不列出所有列?无论如何,你已经有答案了。 –

你几乎没有 - 创建一个部分(又名“过滤”)唯一索引:

create unique index on the_table (day, location) 
    where active;