[英]Create a unique constraint with CHECK in PostgreSQL
考虑有下表:
create table table_1(
id serial
PRIMARY KEY,
col1 varchar(50),
col2 varchar(50),
status varchar(1) -- A=active P=pending D=Deleted
);
现在我想要的是在(col1,col2)上创建唯一约束,但不应考虑status ='D'的约束,即表中有2行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'D');
然后,我应该不能添加以下行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
但我应该能够添加以下行:
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'A');
您可以使用部分唯一索引来执行此操作:
create unique index id_table1_col1_col2_status on table_1(col1, col2, status)
where status <> 'D';
这是一个SQL Fiddle,您可以用来查看它的工作原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.