Jak ZMIENIĆ tabelę PostgreSQL i uczynić kolumnę unikalną?

166

Mam tabelę w PostgreSQL, w której schemat wygląda następująco:

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
)

Teraz chcę uczynić permalink unikalnym w całej tabeli, zmieniając tabelę. Czy ktoś może mi w tym pomóc?

TIA

Baishampayan Ghose
źródło
2
create unique index on foo_table (permalink)
a_horse_with_no_name

Odpowiedzi:

270

Rozgryzłem to na podstawie dokumentacji PostgreSQL, dokładna składnia to:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Dzięki Fred .

Baishampayan Ghose
źródło
231

Lub niech DB automatycznie przypisze nazwę ograniczenia używając:

ALTER TABLE foo ADD UNIQUE (thecolumn);
Clint Pachl
źródło
1
Jeśli to zrobisz, postgres utworzy ograniczenie, ale jego nazwa będzie „automatycznie” przypisywać słowo „dodaj”. Właśnie spróbowałem
Santi
Kiedy używam powyższej składni, Postgress tworzy nową przeciwwagę z nazwą mytable_mycolumn_key jestem z tego całkiem zadowolony :-)
Adam
41

możliwe jest również utworzenie unikalnego ograniczenia obejmującego więcej niż 1 kolumnę:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);
Stefan
źródło
Wydaje się, że to nie działa w przypadku czegoś takiego jak: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);lubALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus