Nếu bạn không cần thiết bị này có thể di động sang một RDBMS khác thì rất nhiều nhanh hơn và đơn giản hơn để sử dụng các bảng danh mục trong pg_catalog
thay vì giản đồ thông tin chuẩn:
SELECT c.confrelid::regclass::text AS referenced_table
, c.conname AS fk_name
, pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
WHERE a.attrelid = '"Schema2"."TableB"'::regclass -- table name
AND a.attname = 'A_Id' -- column name
AND c.contype = 'f'
ORDER BY conrelid::regclass::text, contype DESC;
Lợi nhuận:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Ghi chú
-
Hai cột bổ sung chỉ dành cho định hướng. Theo Q của bạn, bạn chỉ cần cột đầu tiên.
-
Điều này trả về tất cả các bảng được tham chiếu bởi tất cả các khóa ngoại liên quan đến tên cột đã cho - bao gồm các ràng buộc FK trên nhiều cột.
-
Tên tự động đủ điều kiện giản đồ hay không tùy theo khả năng hiển thị được đặt bởi
search_path
hiện tại . Tên cũng được tự động thoát ra khi cần thiết (ký tự không hợp lệ hoặc viết hoa, từ dành riêng, ...).
Xem chi tiết của pg_constraint
và pg_attribute
trong sách hướng dẫn. Và nhiều hơn nữa về các loại định danh đối tượng.
Có liên quan:
- Ràng buộc thả PostgreSQL với tên không xác định
- Truy xuất tất cả PK và FK