web-dev-qa-db-fra.com

Dans Postgresql, Force unique sur la combinaison de deux colonnes

Je voudrais mettre en place un tableau dans postgresql tel que deux colonnes ensemble doivent être uniques. Il peut y avoir plusieurs valeurs de l'une ou l'autre valeur, tant qu'il n'y en a pas deux qui partagent les deux.

Par exemple:

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

Alors, col1 et col2 peut répéter, mais pas en même temps. Donc, cela serait permis (sans inclure l'identifiant)

1 1
1 2
2 1
2 2

mais pas ceci:

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

autoincrement n'est pas postgresql. Vous voulez un serial.

Si col1 et col2 font un unique et ne peuvent pas être null, alors ils font une bonne clé primaire:

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

Créez une contrainte unique selon laquelle deux nombres ne peuvent PAS être répétés ensemble:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)
126
djangojazz

On dirait un régulier UNIQUE CONTRAINT :)

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

Plus ici

13
Timur Sadykov