我想在PostgreSQL中设置一个表,这样两列在一起必须是唯一的。任何一个值都可以有多个值,只要没有两个值同时具有这两个值。
例如:
CREATE TABLE someTable (
id int PRIMARY KEY AUTOINCREMENT,
col1 int NOT NULL,
col2 int NOT NULL
)
所以col1和col2可以重复,但不能同时重复。因此,这是允许的(不包括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。您希望始终生成一个整数主键作为标识(如果使用PG 9或更低,则生成一个串行主键。串行在PG 10中被轻度弃用)。
如果col1和col2是唯一的,并且不能为空,那么它们是一个很好的主键:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY (col1, col2)
)
CREATE TABLE someTable (
id serial PRIMARY KEY,
col1 int NOT NULL,
col2 int NOT NULL,
UNIQUE (col1, col2)
)
Autoincrement不是postgresql。您希望始终生成一个整数主键作为标识(如果使用PG 9或更低,则生成一个串行主键。串行在PG 10中被轻度弃用)。
如果col1和col2是唯一的,并且不能为空,那么它们是一个很好的主键:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY (col1, col2)
)