繁体   English   中英

在PostgreSQL中使用CHECK创建唯一约束

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

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