sql - 在Postgresql中,对2列添加唯一约束,不等于特定值

标签 sql postgresql multi-index

有一个名为 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

谢谢!

最佳答案

how can I add a unique constraint to allow unique address_id + false, and allow multiple 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 条件唯一约束”。

关于sql - 在Postgresql中,对2列添加唯一约束,不等于特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59571709/

相关文章:

java - 如何使用 JPA 和 Hibernate 复制 INSERT/UPDATE/DELETE 语句

postgresql - 串行(自动递增)主键的标签

mysql - 在 SQL 中不使用聚合函数的最高/最低值

python - Pandas Column Multiindex 相互减去列

python - 维护 Pandas 多索引数据帧的顺序

sql - 使用 Excel 宏 (ADODB) 在 SQL Server 2008 中创建临时表

sql - 如何在 PostgreSQL 中使用带变量的内部连接创建 View ?

mysql - 连接元组sql

防止注入(inject)的 C# 字符串参数?

python - 在 Pandas DataFrame 中转置选定的 MultiIndex 级别