Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用签入PostgreSQL创建唯一约束_Sql_Postgresql - Fatal编程技术网

使用签入PostgreSQL创建唯一约束

使用签入PostgreSQL创建唯一约束,sql,postgresql,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,CO

考虑下表:

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)上创建一个唯一的约束,但是它不应该考虑那些具有状态=“的”,即表中有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');
但我应该能够添加以下行:

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';
在表1上创建唯一索引id\u table1\u col1\u col2\u状态(col1,col2,status)
其中状态为“D”;

是一个SQL小提琴,您可以使用它来查看它的工作情况。

谢谢。我只需要这样:在状态为“D”的表1(col1,col2)上创建唯一的索引id_table1_col1_col2;我不知道在创建索引时可以使用WHERE。如果
状态为null,那么
状态“D”将如何工作?如果它永远不会是
null
,那么应该使用
notnull
约束来创建它。