两行之间交叉的唯一性约束

时间:2014-07-18 17:52:49

标签: sql postgresql

我正在创建一个(postgres)表格,其中包含:

CREATE TABLE workers(id INT PRIMARY KEY,deleted_at DATE,account_id INT)

我希望仅对尚未删除的工作人员进行唯一性约束。有没有一种很好的方法在sql中实现这一点?举个例子:

id | date | account_id
1 | NULL | 1
# valid, was deleted
2 | yesterday | 1
# invalid, dup account
# 3 | NULL | 1

1 个答案:

答案 0 :(得分:2)

你想要Postgres所谓的“部分索引”(以及其他数据库调用过滤索引):

create unique index idx_workers_account_id on workers(account_id)
    where deleted_at is null;

Here是有关此功能的文档。