特定值集的PostgreSQL唯一索引
假设有一个表AVATARS,在其他列中,它有特定值集的PostgreSQL唯一索引,sql,postgresql,Sql,Postgresql,假设有一个表AVATARS,在其他列中,它有user\u id(用户表的外键)和state,其中state可以是0到6之间的任意值。我想创建一个约束,这样用户只能有2个化身,其中一个状态为0,另一个状态为任意!=0我想知道是否有可能实现一个唯一的索引?或者我必须添加一些布尔列?您可以使用过滤的唯一索引来执行此操作 对于一个状态为0的值: create unique index unq_avatars_user_state0 on avatars(user_id, state) w
user\u id
(用户表的外键)和state
,其中state可以是0到6之间的任意值。我想创建一个约束,这样用户只能有2个化身,其中一个状态为0,另一个状态为任意!=0我想知道是否有可能实现一个唯一的索引?或者我必须添加一些布尔列?您可以使用过滤的唯一索引来执行此操作
对于一个状态为0的值:
create unique index unq_avatars_user_state0
on avatars(user_id, state)
where state = 0;
对于一个状态为0的值:
创建唯一索引unq\u avatars\u user\u state0
在化身上(用户id、状态)
其中状态为0;
注意:这些并不能保证这些值的存在,只是每个值最多有一个。您可以将唯一索引与表达式一起使用:
CREATE UNIQUE INDEX avatars_userid_state_0_idx ON avatars(user_id,(state<>0));
在头像上创建唯一索引头像\u userid\u state\u 0\u idx(user\u id,(state0));
(或state=0
,最终结果相同)
CREATE UNIQUE INDEX avatars_userid_state_0_idx ON avatars(user_id,(state<>0));