bagaimana saya bisa menggunakan beberapa kunci primer di postgres?
Kamu tidak bisa Ini sebuah oxymoron - definisi kunci utama adalah bahwa hal itu yang kunci utama, tunggal. Anda tidak dapat memiliki lebih dari satu.
Anda dapat memiliki banyak unique
kendala. Anda dapat memiliki kunci utama yang berisi banyak kolom (kunci primer gabungan). Tetapi Anda tidak dapat memiliki lebih dari satu kunci utama untuk sebuah tabel.
Namun, kode yang Anda tampilkan tidak menghasilkan kesalahan yang Anda sebutkan:
$ 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
$
Pada tebakan Anda sebenarnya sudah mendefinisikan tabel ini dan Anda mengabaikan kesalahan sebelumnya, lalu hanya menunjukkan yang terakhir. Jika saya menjalankan kembali kode ini saya mendapatkan output:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Kesalahan sebenarnya di sini adalah yang pertama, tentu saja.
Saya sangat menyarankan selalu menggunakan -v ON_ERROR_STOP=1
di psql
, misalnya:
$ 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
$
Lihat bagaimana itu berhenti pada kesalahan pertama?
(Ini akan menjadi default tapi itu akan merusak kompatibilitas ke belakang).