我在 Postgres 中有一个表,其中记录类型为[event_id, user_id, status]
。用户的范围是每个事件的,因此我有一个唯一的索引,[event_id, user_id]
以便用户具有唯一的状态。状态是枚举类型。
但是,我最多只能拥有一条 status=owner 的记录。我正在尝试放置一个条件索引,例如[event_id, status] where "status" == "owner"
.
[ev, user, status]
[1, 1, owner] <- ok
[1, 2, owner] <- wrong
[1, 2, pending] <- ok
[1, 3, pending] <- ok
Run Code Online (Sandbox Code Playgroud)
有任何线索如何做到这一点吗?
是的,语法几乎就是你想象的那样。它们称为部分索引(或过滤索引)并且可以是唯一的。
CREATE UNIQUE INDEX event_unique_ower_uqx -- index name
ON table_name (event_id)
WHERE (status = 'owner') ;
Run Code Online (Sandbox Code Playgroud)
这实质上是说:
“不允许多于一行的状态
'owner'
相同event_id
。”
该索引对任何status
不同于 的行没有任何限制'owner'
。
归档时间: |
|
查看次数: |
1651 次 |
最近记录: |