268 votes

Puis-je ajouter une contrainte UNIQUE à une table PostgreSQL, après qu'elle ait été créée ?

J'ai le tableau suivant :

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

Je ne veux pas qu'il y ait jamais plus d'une colonne pour une même tickername / tickerbbname paire. J'ai déjà créé la table et j'y ai inséré de nombreuses données (dont je me suis déjà assuré qu'elles répondent aux critères d'unicité). Cependant, au fur et à mesure qu'elle s'agrandit, la marge d'erreur s'accroît.

Existe-t-il un moyen d'ajouter un UNIQUE à ce stade ?

502voto

hhaamu Points 1160

psql de l'aide en ligne :

\h ALTER TABLE

Également documenté dans le docs postgres (une excellente ressource, facile à lire).

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

51voto

Zeck Points 151

Oui, c'est possible. Mais si vous avez des entrées non uniques dans votre table, cela échouera. Voici comment ajouter une contrainte unique à votre table dans PostgreSQL 9.x :

    CREATE UNIQUE INDEX constraint_name ON table_name (columns);

19voto

Lucas Campos Points 141

Si vous avez une table qui a déjà des contraintes basées sur, disons, le nom et le prénom et que vous voulez ajouter une contrainte unique, vous devez supprimer toute la contrainte :

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

Assurez-vous que la nouvelle contrainte que vous souhaitez ajouter est unique/non nulle (s'il s'agit de Microsoft Sql, elle ne peut contenir qu'une seule valeur nulle) pour toutes les données de cette table, et vous pourrez alors la recréer.

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);

6voto

Jordan S. Jones Points 7724

Oui, vous pouvez ajouter une contrainte UNIQUE après coup. Cependant, si vous avez des entrées non uniques dans votre table, Postgres s'en plaindra jusqu'à ce que vous les corrigiez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X