[英]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.