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

时间:2018-04-03 15:51:39

标签: sql 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');

1 个答案:

答案 0 :(得分:1)

您可以使用部分唯一索引执行此操作:

create unique index id_table1_col1_col2_status on table_1(col1, col2, status)
    where status <> 'D';

Here是一个SQL小提琴,您可以使用它来查看它是否有效。