繁体   English   中英

Postgresql:有条件的唯一约束

[英]Postgresql: Conditionally unique constraint

我想添加一个约束,该约束仅对表的一部分中的列强制执行唯一性。

ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);

上面的WHERE部分是一厢情愿的想法。

有没有办法做到这一点? 还是我应该回到关系绘图板?

PostgreSQL 没有定义部分(即条件) UNIQUE约束——但是,您可以创建部分唯一索引 PostgreSQL 使用唯一索引来实现唯一约束,所以效果是一样的,你只是不会看到information_schema列出的约束。

CREATE UNIQUE INDEX stop_myc ON stop (col_a) WHERE (col_b is NOT null);

请参阅部分索引

已经说过 PG 没有定义部分(即有条件的)UNIQUE 约束。 还文档说向表添加唯一约束的首选方法是ADD CONSTRAINT Unique Indexes

向表添加唯一约束的首选方法是 ALTER TABLE ... ADD CONSTRAINT。 使用索引来强制唯一约束可以被视为不应直接访问的实现细节。 但是,应该注意没有必要在唯一的列上手动创建索引; 这样做只会复制自动创建的索引。

有一种方法可以使用Exclusion Constraints来实现它,(感谢 @dukelion 提供此解决方案)

在你的情况下,它看起来像

ALTER TABLE stop ADD CONSTRAINT myc EXCLUDE (col_a WITH =) WHERE (col_b IS null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM