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.