Comment modifier une table PostgreSQL et rendre une colonne unique?


166

J'ai une table dans PostgreSQL où le schéma ressemble à ceci:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

Maintenant, je veux rendre le permalien unique sur la table en ALTER-IN la table. Quelqu'un peut-il m'aider avec ça?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name

Réponses:


270

Je l'ai compris à partir de la documentation PostgreSQL, la syntaxe exacte est:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Merci Fred .


231

Ou demandez au DB d'attribuer automatiquement un nom de contrainte en utilisant:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
Si vous faites cela, postgres va créer la contrainte mais le nom va être assigné "automatiquement" est le mot "ajouter". Je viens de l'essayer
Santi

1
Lorsque j'utilise la syntaxe ci-dessus, Postgress crée la nouvelle contraint avec le nom dont mytable_mycolumn_key je suis assez content :-)
Adam

41

il est également possible de créer une contrainte unique de plus d'une colonne:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

Cela ne semble pas fonctionner pour quelque chose comme: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);ouALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.