在Postgresql中,在两列的组合上强制唯一

我想在postgresql中设置一个表格,使得两列在一起必须是唯一的。 可以有任何值的多个值,只要没有两个共享这两个值。

例如:

CREATE TABLE someTable ( id int PRIMARY KEY AUTOINCREMENT, col1 int NOT NULL, col2 int NOT NULL ) 

所以, col1col2可以重复,但不能同时重复。 所以,这将被允许(不包括id)

 1 1 1 2 2 1 2 2 

但不是这样的:

 1 1 1 2 1 1 -- would reject this insert for violating constraints 
 CREATE TABLE someTable ( id serial primary key, col1 int NOT NULL, col2 int NOT NULL, unique (col1, col2) ) 

autoincrement不是postgresql。 你想要一个serial

如果col1和col2是唯一的,并且不能为null,那么他们会创build一个好的主键:

 CREATE TABLE someTable ( col1 int NOT NULL, col2 int NOT NULL, primary key (col1, col2) ) 

创build两个数字不能一起重复的唯一约束:

 ALTER TABLE someTable ADD UNIQUE (col1, col2) 

看起来像常规的唯一约束:)

 CREATE TABLE example ( a integer, b integer, c integer, UNIQUE (a, c)); 

更多在这里