En Postgresql, fuerza única en la combinación de dos columnas

Resuelto PearsonArtPhoto asked hace 11 años • 4 respuestas

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, col1y col2puedo 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
PearsonArtPhoto avatar Jan 09 '13 01:01 PearsonArtPhoto
Aceptado
CREATE TABLE someTable (
    id serial PRIMARY KEY,
    col1 int NOT NULL,
    col2 int NOT NULL,
    UNIQUE (col1, col2)
)

autoincrementno es postgresql. Quieres un integer primary key generated always as identity(o serialsi usas PG 9 o inferior, serialquedó en desuso en PG 10 ).

Si col1y col2es ú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)
)
Clodoaldo Neto avatar Jan 08 '2013 18:01 Clodoaldo Neto

Cree una restricción única para que dos números juntos NO PUEDAN repetirse juntos:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)
djangojazz avatar Jan 08 '2013 18:01 djangojazz