【问题标题】: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 条件唯一约束”。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多