ฉันจะแก้ไขตาราง PostgreSQL และสร้างคอลัมน์ที่ไม่ซ้ำได้อย่างไร


166

ฉันมีตารางใน PostgreSQL ซึ่ง schema มีลักษณะดังนี้:

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
)

ตอนนี้ฉันต้องการทำให้ลิงก์ถาวรที่ไม่ซ้ำกันทั่วทั้งตารางโดยการเปลี่ยนแปลงตาราง ใครช่วยฉันได้ไหม

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name

คำตอบ:


270

ฉันคิดว่ามันออกมาจากเอกสาร PostgreSQL ไวยากรณ์ที่แน่นอนคือ:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

ขอบคุณเฟร็ด


231

หรือให้ DB กำหนดชื่อข้อ จำกัด โดยอัตโนมัติโดยใช้:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
หากคุณทำสิ่งนี้ postgres จะสร้างข้อ จำกัด แต่ชื่อจะเป็น "อัตโนมัติ" การกำหนดคือคำว่า "เพิ่ม" ฉันเพิ่งลองไป
สันติ

เมื่อฉันใช้ไวยากรณ์ข้างต้น Postgress สร้าง contraint ใหม่ที่มีชื่อmytable_mycolumn_key ผมค่อนข้างมีความสุขกับที่ :-)
อดัม

41

เป็นไปได้ที่จะสร้างข้อ จำกัด ที่ไม่ซ้ำใครของคอลัมน์มากกว่า 1 คอลัมน์:

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

ดูเหมือนจะใช้งานไม่ได้กับบางสิ่งเช่น: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);หรือALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.