ฉันสามารถเพิ่มข้อ จำกัด UNIQUE ลงในตาราง PostgreSQL หลังจากสร้างเสร็จแล้วได้หรือไม่


185

ฉันมีตารางต่อไปนี้:

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

ฉันไม่ต้องการที่จะมีมากกว่าหนึ่งคอลัมน์สำหรับคู่tickername/ ใด ๆ ที่กำหนด tickerbbnameฉันได้สร้างตารางและมีข้อมูลจำนวนมากแล้ว (ซึ่งฉันได้ทำให้มั่นใจแล้วว่าตรงตามเกณฑ์ที่ไม่ซ้ำกัน) ถึงแม้ว่ามันจะใหญ่ขึ้น แต่ห้องสำหรับข้อผิดพลาดจะคืบคลานเข้ามา

มีวิธีเพิ่มUNIQUEข้อ จำกัด ณ จุดนี้หรือไม่?


คำตอบ:


363

psqlความช่วยเหลือแบบอินไลน์:

\h ALTER TABLE

บันทึกไว้ในเอกสาร postgres ด้วย (ทรัพยากรที่ยอดเยี่ยมรวมทั้งง่ายต่อการอ่านด้วย)

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

6
ขอบคุณ @hhaamu อ๋อลองใช้ docs แต่ข้างต้นของคุณกระชับกว่านี้มาก
โทมัสบราวน์

117
หากคุณต้องการที่จะให้ PostgreSQL ALTER TABLE tablename ADD UNIQUE (columns);สร้างชื่อดัชนีการใช้งาน (โปรดทราบว่าCONSTRAINTจะต้องละเว้นคำหลัก)
jpmc26

5
ฉันต้องการคำตอบสำหรับคำถามนี้และเริ่ม googling สำหรับเอกสาร แทนที่จะเป็นเอกสาร Postgres ฉันวิ่งเข้าไปในหัวข้อนี้ที่ StackOverflow ดังนั้นแม้ว่าจะเป็นความคิดที่ดีที่จะอ้างอิงเอกสารอย่างเป็นทางการ แต่ก็ดีมากที่จะให้คำตอบสำหรับการเยี่ยมชมในอนาคต ขอบคุณสำหรับสิ่งนั้น.
Leonard

@ jpmc26 «หากคุณต้องการให้ PostgreSQL สร้างชื่อดัชนี»คุณหมายถึงชื่อข้อ จำกัด หรือไม่
tuxayo

4
@tuxayo ข้อ จำกัด เฉพาะถูกนำไปใช้ผ่านดัชนีใน Postgres (เพื่อไม่ให้มีความคล่องแคล่ว)
Chris W.

36

ใช่คุณสามารถ. แต่ถ้าคุณมีรายการที่ไม่ซ้ำกันบนโต๊ะของคุณมันจะล้มเหลว นี่คือวิธีเพิ่มข้อ จำกัด ที่ไม่ซ้ำใครบนโต๊ะของคุณ หากคุณใช้ PostgreSQL 9.x คุณสามารถทำตามคำแนะนำด้านล่าง

CREATE UNIQUE INDEX constraint_name ON table_name (columns);

3
ขอบคุณ Zeck - 2y ดีตอบ แต่ยังคงขอบคุณที่ผู้คนยังคงใช้เวลา! Tom
Thomas Browne

1
ไม่ถูกต้อง ใน Postgres ล่าสุดข้อความนี้นำไปสู่ข้อความเช่น "Key (uuid) = (3a533772-07ac-4e76-b577-27a3878e2222) ซ้ำกัน Query ล้มเหลว" ถ้าคุณมีค่าที่ไม่ซ้ำกัน ...
Strinder

3
@ ผู้ประกาศว่าเป็นสิ่งที่ไม่ดีหรือไม่? แก้ไขข้อมูลที่ซ้ำกันก่อน
Jasen

3
@ Jasen นั่นชัดเจนโดยสิ้นเชิง แค่อยากจะเน้นคำตอบนั้น "แต่ถ้าคุณมีรายการที่ไม่ซ้ำกันในตารางของคุณนี่คือวิธีการเพิ่มข้อ จำกัด ที่ไม่ซ้ำกันบนโต๊ะของคุณ" จะไม่ทำงาน. แน่นอนว่าจะต้องรวมรายการที่ไม่ซ้ำกันไว้ล่วงหน้าเสมอ
Strinder

แก้ไขคำตอบเพื่อความชัดเจน
ซาเวียร์โฮ

6

หากคุณมีตารางที่มีข้อ จำกัด ที่มีอยู่แล้วโดยอิงตามสมมติว่า: ชื่อและนามสกุลและคุณต้องการเพิ่มข้อ จำกัด ที่ไม่ซ้ำใครอีกหนึ่งข้อคุณต้องลบข้อ จำกัด ทั้งหมดโดย:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

ตรวจสอบให้แน่ใจว่าข้อ จำกัด ใหม่ที่คุณต้องการเพิ่มนั้นไม่ซ้ำกัน / ไม่เป็นโมฆะ (ถ้า Microsoft Sql สามารถมีได้เพียงหนึ่งค่าว่างเท่านั้น) ในข้อมูลทั้งหมดในตารางนั้นจากนั้นคุณสามารถสร้างใหม่ได้

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);

5

ใช่คุณสามารถเพิ่มข้อ จำกัด UNIQUE หลังจากข้อเท็จจริง อย่างไรก็ตามหากคุณมีรายการที่ไม่ซ้ำกันในตาราง Postgres ของคุณจะบ่นเกี่ยวกับมันจนกว่าคุณจะแก้ไขพวกเขา


7
select <column> from <table> group by 1 having count(*) > 1;จะให้รายงานค่าที่ซ้ำกัน
Jasen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.