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

Baishampayan Ghose
quelle
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 .

Baishampayan Ghose
quelle
231

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

ALTER TABLE foo ADD UNIQUE (thecolumn);
Clint Pachl
quelle
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);
Stefan
quelle
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