【问题标题】:In Postgresql, add unique constraint on 2 columns, not equal to a specific value在 Postgresql 中,在 2 列上添加唯一约束,不等于特定值
【发布时间】:2020-04-21 14:42:04
【问题描述】:
有一个名为People 的表,列address_id (int) 和is_deleted (boolean),
如何添加唯一约束以允许唯一address_id + false,并允许多个address_id + true。
例如
address_id | is_deleted
-----------------------
1 | false
2 | true
2 | true
2 | true
谢谢!
【问题讨论】:
标签:
sql
postgresql
multi-index
【解决方案1】:
如何添加唯一约束以允许唯一的address_id + false,并允许多个address_id + true
不能使用 CHECK,因为这在并发插入或更新的情况下不起作用。
您可以使用条件唯一索引:
CREATE UNIQUE INDEX people_addr_id_is_deleted_unique
ON People (address_id) WHERE (NOT is_deleted);
此唯一索引将仅包含满足指定 WHERE 条件的行。根据匹配行的百分比,这可能会节省一些存储空间,或者相对于完整索引节省很多。此外,对未包含在条件索引中的行的更新不必花费时间来更新索引。
Further reading。也谷歌“postgresql 条件唯一约束”。