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 paire donnée tickername
/tickerbbname
. J'ai déjà créé la table et contient beaucoup de données (ce qui m'a déjà permis de répondre aux critères uniques). Au fur et à mesure qu’il grandit, une marge d’erreur se glisse.
Est-il possible d'ajouter une contrainte UNIQUE
à ce stade?
L'aide en ligne de psql
:
\h ALTER TABLE
Également documenté dans le postgres docs (une excellente ressource, plus facile à lire, aussi).
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
Oui, vous pouvez. Mais si vous avez des entrées non uniques sur votre table, cela échouera. Voici comment ajouter une contrainte unique sur votre table. Si vous utilisez PostgreSQL 9.x, vous pouvez suivre les instructions ci-dessous.
CREATE UNIQUE INDEX constraint_name ON table_name (columns);
Oui, vous pouvez ajouter une contrainte UNIQUE après le fait. Cependant, si vous avez des entrées non uniques dans votre table, Postgres s'en plaindra jusqu'à ce que vous les corrigiez.
Si vous aviez déjà une contrainte existante dans une table basée sur, disons: nom et nom et que vous vouliez ajouter une contrainte unique supplémentaire, vous deviez 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 (si Microsoft SQL, elle ne peut contenir qu’une seule valeur NULL) pour toutes les données de cette table, puis vous pouvez la recréer.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);