En Postgresql, fuerza única en la combinación de dos columnas
Me gustaría configurar una tabla en PostgreSQL de modo que dos columnas juntas deban ser únicas. Puede haber múltiples valores de cualquier valor, siempre y cuando no haya dos que compartan ambos.
Por ejemplo:
CREATE TABLE someTable (
id int PRIMARY KEY AUTOINCREMENT,
col1 int NOT NULL,
col2 int NOT NULL
)
Entonces, col1
y col2
puedo repetir, pero no al mismo tiempo. Entonces, esto estaría permitido (sin incluir la identificación)
1 1
1 2
2 1
2 2
pero no esto:
1 1
1 2
1 1 -- would reject this insert for violating constraints
Aceptado
CREATE TABLE someTable (
id serial PRIMARY KEY,
col1 int NOT NULL,
col2 int NOT NULL,
UNIQUE (col1, col2)
)
autoincrement
no es postgresql. Quieres un integer primary key generated always as identity
(o serial
si usas PG 9 o inferior, serial
quedó en desuso en PG 10 ).
Si col1
y col2
es único y no puede ser nulo, entonces son una buena clave principal:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY (col1, col2)
)
Cree una restricción única para que dos números juntos NO PUEDAN repetirse juntos:
ALTER TABLE someTable
ADD UNIQUE (col1, col2)