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.