Bạn có thể thêm dư thừa UNIQUE
ràng buộc
trên id
trước khi bạn thả PRIMARY KEY
hạn chế. Điều đó thỏa mãn yêu cầu của các ràng buộc FK. Theo tài liệu:
Nhấn mạnh đậm của tôi.
Rõ ràng, ràng buộc FK bị ràng buộc với ràng buộc PK mà nó được tạo ra với một cách rõ ràng trong pg_depend
. Vì vậy, bạn cần phải bỏ và sau đó tạo lại tất cả các ràng buộc FK tham chiếu hoặc gây rối với các bảng hệ thống (điều này là không nên!). Tốt nhất trong một giao dịch để giữ nguyên vẹn tính toàn vẹn của tham chiếu:
BEGIN;
ALTER TABLE bar DROP CONSTRAINT bar_id_foo_fkey;
ALTER TABLE foo
DROP CONSTRAINT foo_pkey
, ADD CONSTRAINT foo_uni_id UNIQUE (id)
, ADD PRIMARY KEY (id, id2);
ALTER TABLE bar ADD CONSTRAINT bar_id_foo_fkey
FOREIGN KEY (id) REFERENCES foo (id);
COMMIT;
SQL Fiddle. (Với các truy vấn để hiển thị các mục danh mục cung cấp tên trong số những thứ khác.)
Chi tiết trong hướng dẫn sử dụng ALTER TABLE
.
Điều này chỉ có ý nghĩa như là trạng thái trung gian. Nếu id
ở lại UNIQUE NOT NULL
, nó cũng có thể là PK.