我试图列出架构中的所有外键,并且,对于每个键,列出所涉及的列。
所以我要查询pg_catalog.pg_constraint
和information_schema.columns
表格。
我需要一种方法来区分键,进行第二次查询并检索键列列表。
我想在conname
表中使用约束名称pg_catalog.pg_constraint
列,但PostgreSQL documentation about pg_constraint表示约束名称不一定是唯一的!为什么?我无法在文档中找到有关此事实的其他信息。
这对情侣connamespace
+ conname
是唯一的?
这是我的疑问:
从给定模式中检索外键列表:
SELECT
conname AS constraint_name,
conrelid::regclass AS referring_table,
confrelid::regclass AS referenced_table
FROM pg_catalog.pg_constraint
WHERE contype = 'f' AND ((conrelid::regclass || '' LIKE '<my_schema_name>.%') OR (confrelid::regclass || '' LIKE '<my_schema_name>.%'))
检索给定密钥的列列表:
SELECT
c.column_name AS key_column
FROM information_schema.columns c
JOIN pg_catalog.pg_constraint r ON (c.table_schema || '.' || c.table_name) = (r.conrelid::regclass || '')
WHERE r.conname = '<my_constraint_name>'
感谢您的帮助。
答案 0 :(得分:0)
约束名称仅在定义它们的对象中是唯一的。
两个不同的表(或域)可以具有相同名称的约束。