Postgresql 中值组合的唯一约束
Unique constrain for values combination in Postgresql
是否可以在 Postgresql 中创建唯一约束,这将考虑列值并使用某些值,但不能使用其他值?
我有 table,其中项目 "code" 必须是唯一的,但记录不会从 table 中删除,只是标记为已删除(特殊布尔字段 "deleted").我可以创建 unique(code, deleted)
来强制执行唯一性,如果我不使用相同的 "code" 将 2 行标记为已删除,它就会起作用。如果我尝试 "delete" 第二行,它会警告 2 行将具有相同的唯一值并且不允许。
我想要的是检查每一行的唯一字段 "code",即 "deleted" 为假。
你不能用约束来做到这一点。但是,在 Postgres 中,部分唯一索引可以完全满足您的要求:
create unique index myindex on mytable(code) where (deleted = false);
您也可以这样表述:
create unique index myindex on mytable(code) where (not deleted);
是否可以在 Postgresql 中创建唯一约束,这将考虑列值并使用某些值,但不能使用其他值?
我有 table,其中项目 "code" 必须是唯一的,但记录不会从 table 中删除,只是标记为已删除(特殊布尔字段 "deleted").我可以创建 unique(code, deleted)
来强制执行唯一性,如果我不使用相同的 "code" 将 2 行标记为已删除,它就会起作用。如果我尝试 "delete" 第二行,它会警告 2 行将具有相同的唯一值并且不允许。
我想要的是检查每一行的唯一字段 "code",即 "deleted" 为假。
你不能用约束来做到这一点。但是,在 Postgres 中,部分唯一索引可以完全满足您的要求:
create unique index myindex on mytable(code) where (deleted = false);
您也可以这样表述:
create unique index myindex on mytable(code) where (not deleted);