Bagaimana cara mengubah tabel PostgreSQL dan membuat kolom unik?


166

Saya punya tabel di PostgreSQL tempat skema terlihat seperti ini:

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
)

Sekarang saya ingin membuat permalink unik di seluruh tabel dengan ALTER-ing tabel. Adakah yang bisa membantu saya dengan ini?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name

Jawaban:


270

Saya menemukan jawabannya dari dokumen PostgreSQL, sintaks yang tepat adalah:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Terima kasih Fred .


231

Atau, minta DB secara otomatis menetapkan nama kendala menggunakan:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
Jika Anda melakukan ini, postgres akan membuat batasan tetapi nama yang akan "secara otomatis" tetapkan adalah kata "tambah". Saya baru saja mencobanya
Santi

Ketika saya menggunakan sintaks di atas, Postgress menciptakan contraint baru dengan nama yang mytable_mycolumn_key saya cukup senang dengan itu :-)
Adam

41

Anda juga dapat membuat batasan unik lebih dari 1 kolom:

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

Ini sepertinya tidak bekerja untuk sesuatu seperti: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);atauALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.