Các phụ thuộc bên trong giữa các bảng và / hoặc các đối tượng khác không bao giờ bị ràng buộc với tên đối tượng. Trong nội bộ, mọi đối tượng được lưu trữ trong bảng danh mục và OID (khóa chính nội bộ) của đối tượng được sử dụng cho mọi thứ khác.
Theo đó, một FOREIGN KEY
tham chiếu được lưu trữ trong bảng danh mục pg_constraint
(bản thân ràng buộc bao gồm tên của nó) và pg_depend
. Thay đổi tên bảng sẽ hoàn toàn không làm giảm chức năng .
Tên của ràng buộc vẫn không thay đổi. Bạn có thể bỏ qua điều đó hoặc bạn có thể muốn đổi tên ràng buộc để nó không gây hiểu lầm.
Tuy nhiên, vì bạn không chỉ định tên ràng buộc tại thời điểm tạo, hệ thống đã chọn một tên mặc định, đó là example2_example1fk_fkey
trong trường hợp của bạn trừ khi tên đã được sử dụng. Không có tham chiếu đến bảng được tham chiếu Tên. Nhưng tên cột cũng có thể sẽ phải thay đổi trong ví dụ của bạn. Và đó được sử dụng trong tên ràng buộc.
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
Trong Postgres 9.2 trở lên, bạn cũng có thể đổi tên ràng buộc (cũng như dequis đã nhận xét ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
Trong các phiên bản cũ hơn, bạn phải thả và tạo lại ràng buộc để đổi tên nó, tốt nhất là trong một câu lệnh duy nhất:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;
Chi tiết trong sách hướng dẫn.