ฉันจะใช้หลายคีย์หลักใน postgres ได้อย่างไร
คุณทำไม่ได้ มันขัด - ความหมายของคีย์หลักคือว่ามันเป็นคีย์หลักเอกพจน์ คุณไม่สามารถมีมากกว่าหนึ่ง
คุณสามารถมีunique
ข้อ จำกัดหลายอย่าง คุณสามารถมีคีย์หลักที่มีหลายคอลัมน์ (คีย์หลักแบบคอมโพสิต) แต่คุณไม่สามารถมีคีย์หลักมากกว่าหนึ่งคีย์สำหรับตาราง
อย่างไรก็ตามรหัสที่คุณแสดงไม่ได้ทำให้เกิดข้อผิดพลาดที่คุณกล่าวถึง:
$ psql -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
CREATE TABLE
ALTER TABLE
ALTER TABLE
$
คาดเดาว่าคุณได้กำหนดตารางนี้แล้วและคุณไม่สนใจข้อผิดพลาดก่อนหน้านี้จากนั้นแสดงเฉพาะตารางสุดท้าย หากฉันเรียกใช้รหัสนี้ซ้ำฉันจะได้ผลลัพธ์:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
ข้อผิดพลาดจริงที่นี่เป็นข้อผิดพลาดแรก
ฉันแนะนำให้ใช้เสมอ-v ON_ERROR_STOP=1
ในpsql
เช่น:
$ psql -v ON_ERROR_STOP=1 -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
ERROR: relation "word" already exists
$
มาดูกันว่ามันจะหยุดที่ข้อผิดพลาดแรก?
(มันจะเป็นค่าเริ่มต้น แต่นั่นจะทำลายความเข้ากันได้ย้อนหลัง)