wake-up-neo.net

Kann ich einer PostgreSQL-Tabelle eine UNIQUE-Einschränkung hinzufügen, nachdem sie bereits erstellt wurde?

Ich habe folgende Tabelle:

 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

Ich möchte nicht, dass es für ein bestimmtes tickername/tickerbbname-Paar mehr als eine Spalte gibt. Ich habe die Tabelle bereits erstellt und viele Daten darin gespeichert (von mir wurde sichergestellt, dass sie die eindeutigen Kriterien erfüllen). Wenn es jedoch größer wird, schleicht sich der Raum für Fehler ein.

Gibt es eine Möglichkeit, an dieser Stelle eine UNIQUE -Beschränkung hinzuzufügen?

161
Thomas Browne

Inline-Hilfe von psql:

\h ALTER TABLE

Auch dokumentiert in den postgres docs (eine ausgezeichnete Ressource und auch leicht zu lesen).

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
319
hhaamu

Ja, du kannst. Wenn Sie jedoch nicht eindeutige Einträge in Ihrer Tabelle haben, schlägt dies fehl. Hier erfahren Sie, wie Sie Ihrer Tabelle eine eindeutige Einschränkung hinzufügen. Wenn Sie PostgreSQL 9.x verwenden, können Sie die folgenden Anweisungen befolgen.

CREATE UNIQUE INDEX constraint_name ON table_name (columns);
31
Zeck

Ja, Sie können nachträglich eine EINZIGARTIGE Einschränkung hinzufügen. Wenn Sie jedoch nicht eindeutige Einträge in Ihrer Tabelle haben, wird sich Postgres darüber beschweren, bis Sie sie korrigieren.

5
Jordan S. Jones

Wenn Sie eine Tabelle hatten, in der bereits Einschränkungen auf der Grundlage von beispielsweise "Name" und "Nachname" vorhanden waren, und Sie eine weitere eindeutige Einschränkung hinzufügen möchten, müssen Sie die gesamte Einschränkung löschen, indem Sie folgende Schritte ausführen:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

Stellen Sie sicher, dass die neue Einschränkung, die Sie hinzufügen möchten, für alle Daten in dieser Tabelle eindeutig/nicht null ist (wenn sie Microsoft SQL enthält, kann sie nur einen Nullwert enthalten). Anschließend können Sie sie neu erstellen.

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