Wie ändere ich eine PostgreSQL-Tabelle und mache eine Spalte eindeutig?


164

Ich habe eine Tabelle in PostgreSQL, in der das Schema folgendermaßen aussieht:

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
)

Jetzt möchte ich den Permalink in der Tabelle eindeutig machen, indem ich die Tabelle ändere. Kann mir jemand dabei helfen?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name

Antworten:


269

Ich habe es aus den PostgreSQL-Dokumenten herausgefunden. Die genaue Syntax lautet:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Danke Fred .


231

Oder lassen Sie die Datenbank automatisch einen Einschränkungsnamen zuweisen, indem Sie:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
Wenn Sie dies tun, wird postgres die Einschränkung erstellen, aber der Name wird "automatisch" zugewiesen. Das Wort "add" wird zugewiesen. Ich habe es gerade versucht
Santi

Wenn ich die obige Syntax verwende, erstellt Postgress die neue Kontraint mit dem Namen, mit dem mytable_mycolumn_key ich ziemlich zufrieden bin :-)
Adam

42

Es ist auch möglich, eine eindeutige Einschränkung von mehr als einer Spalte zu erstellen:

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

Dies scheint nicht zu funktionieren für: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);oderALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.