Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定值集的PostgreSQL唯一索引_Sql_Postgresql - Fatal编程技术网

特定值集的PostgreSQL唯一索引

特定值集的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

假设有一个表AVATARS,在其他列中,它有
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));