Postgresql中值组合的唯一约束

Postgresql中值组合的唯一约束,sql,postgresql,unique-constraint,Sql,Postgresql,Unique Constraint,是否可以在Postgresql中创建唯一约束,该约束将考虑列值并使用某些值,但不使用另一个值 我有一个表,其中的项具有必须唯一的“代码”,但记录并没有从表中删除,只是标记为已删除(特殊的布尔字段“已删除”)。我可以创建unique(code,deleted)来强制执行唯一性,如果我不使用相同的“code”将两行标记为deleted,它就会起作用。如果我试图“删除”第二行,它会提醒两行将具有相同的唯一值,并且不允许。 我想要的是,检查每一行的唯一字段“code”,即“deleted”为false。

是否可以在Postgresql中创建唯一约束,该约束将考虑列值并使用某些值,但不使用另一个值

我有一个表,其中的项具有必须唯一的“代码”,但记录并没有从表中删除,只是标记为已删除(特殊的布尔字段“已删除”)。我可以创建
unique(code,deleted)
来强制执行唯一性,如果我不使用相同的“code”将两行标记为deleted,它就会起作用。如果我试图“删除”第二行,它会提醒两行将具有相同的唯一值,并且不允许。
我想要的是,检查每一行的唯一字段“code”,即“deleted”为false。

您不能使用constraint执行此操作。然而,在Postgres中,部分唯一索引将完全满足您的要求:

create unique index myindex on mytable(code) where (deleted = false);
您也可以将其表述为:

create unique index myindex on mytable(code) where (not deleted);