Làm thế nào tôi có thể sử dụng nhiều khóa chính trong postgres?
Bạn không thể. Đây là một nghịch lý - định nghĩa của một khóa chính là nó là khóa chính, số ít. Bạn không thể có nhiều hơn một.
Bạn có thể có nhiều unique
ràng buộc. Bạn có thể có khóa chính chứa nhiều cột (khóa chính tổng hợp). Nhưng bạn không thể có nhiều hơn một khóa chính cho một bảng.
Tuy nhiên, mã bạn hiển thị không tạo ra lỗi bạn đã đề cập:
$ 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
$
Theo phỏng đoán, bạn thực sự đã xác định bảng này và bạn đang bỏ qua các lỗi trước đó, sau đó chỉ hiển thị lỗi cuối cùng. Nếu tôi chạy lại mã này, tôi nhận được đầu ra:
ERROR: relation "word" already exists
ALTER TABLE
ERROR: multiple primary keys for table "word" are not allowed
Lỗi thực sự ở đây là lỗi đầu tiên, tất nhiên.
Tôi khuyên các bạn nên luôn luôn sử dụng -v ON_ERROR_STOP=1
trong psql
, ví dụ như:
$ 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
$
Xem làm thế nào nó dừng lại ở lỗi đầu tiên?
(Nó là mặc định nhưng sẽ phá vỡ tính tương thích ngược).