PostgreSQL针对特定值集的唯一索引

时间:2016-01-12 13:24:15

标签: sql postgresql

假设有一个表AVATARS,其他列中有user_id(用户表的外键)和state,其中state可以是0到6之间的任何值。想要创建一个约束,以便用户只能拥有2个头像,其中一个状态为= 0而另一个具有任何状态!= 0.我想知道是否可以使用唯一索引实现?或者我将不得不添加一些布尔列?

2 个答案:

答案 0 :(得分:1)

您可以使用带表达式的唯一索引:

CREATE UNIQUE INDEX avatars_userid_state_0_idx ON avatars(user_id,(state<>0));

(或state = 0,最终结果相同)。

答案 1 :(得分:0)

您可以使用过滤的唯一索引来执行此操作。

对于state = 0的一个值:

create unique index unq_avatars_user_state0
    on avatars(user_id, state)
    where state = 0;

对于状态为&lt;&gt;的一个值0:

create unique index unq_avatars_user_state0
    on avatars(user_id, state)
    where state <> 0;

注意:这些值并不保证这些值存在,只是每个值中最多只有一个。

相关问题