当前位置: 首页 > 知识库问答 >
问题:

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

孙梓
2023-03-14

有一个名为People的表,列address_id(int)is_deleted(boolean),如何添加唯一约束以允许唯一address_idfalse,并允许多个address_idtrue

例如

address_id | is_deleted
-----------------------
1          | false
2          | true
2          | true
2          | true

谢谢

共有1个答案

宰父远
2023-03-14

如何添加唯一约束以允许唯一address_id为假,并允许多个address_id为真

不能使用检查,因为在并发插入或更新的情况下检查不起作用。

您可以使用条件唯一索引:

CREATE UNIQUE INDEX people_addr_id_is_deleted_unique 
ON People (address_id) WHERE (NOT is_deleted);

此唯一索引将只包含满足指定WHERE条件的行。根据匹配行的百分比,这可能会节省一点存储空间,或者相对于完整索引节省很多。此外,对不包括在条件索引中的行的更新不必花费时间更新索引。

进一步阅读。还有谷歌“后gresql条件唯一约束”。

 类似资料:
  • 我想添加一个约束,只在表的一部分中对列强制唯一性。 上面的部分是一厢情愿的想法。 有办法吗?还是应该回到关系绘图板?

  • 问题内容: 我们有一个遗留数据库架构,该架构具有一些有趣的设计决策。直到最近,我们仅支持Oracle和SQL Server,但是我们试图添加对PostgreSQL的支持,这带来了一个有趣的问题。我已经搜索了Stack Overflow和Internet的其余部分,但我不认为这种特殊情况是重复的。 对于唯一约束中的可为空的列,Oracle和SQL Server的行为相同,这实际上是在执行唯一检查时忽

  • 我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一

  • 问题内容: 这是我的模型: 每个书的编号从每位作者的1开始并向上递增。因此,我们将有John Grisham撰写的1,2,3本书,George Martin撰写的1..5本书,等等。 我是否可以设置一个唯一的约束条件,以确保我们不会有两本书的作者相同?与相似,但约束仅适用于?的复合 问题答案: 用途:

  • 问题内容: 我有一种情况,我只想在其他字段中有特定值的情况下才添加唯一约束(例如表为ID CategoryName名称值Value CategoryID) 约束将在ID,CategoryName和Name上,只有CategoryID为0 是否有可能? 问题答案:

  • 问题内容: 我们如何确保列表中的各个字符串不为null /空白或遵循特定的模式 我也想添加图案 但是我可以不用它。但是我绝对希望有一个约束,它可以检查列表中的任何字符串是否为null或空白。而且Json模式看起来如何 问题答案: 您可以为电子邮件字符串创建一个简单的包装类: 然后在现有对象中标记该字段: 然后,验证器将验证列表中的每个对象。