PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thay đổi khóa chính thành khóa chính tổng hợp

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lưu trữ hơn 255 ký tự trong Cơ sở dữ liệu PostgreSQL trên heroku

  2. đặc điểm `diesel ::Expression` không được triển khai cho` bigdecimal ::BigDecimal`

  3. Sự cố khi chèn bằng psycopg

  4. Tạo chỉ mục duy nhất một phần với sqlalchemy trên Postgres

  5. Postgresql:FATAL:vai trò không tồn tại