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


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 .


231

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

ALTER TABLE foo ADD UNIQUE (thecolumn);

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);

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.