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

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

Baishampayan Ghose
sumber
231

Atau, minta DB secara otomatis menetapkan nama kendala menggunakan:

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