我试图使用系统目录结构列出PostgreSQL中与其对应的模式和列的所有关系。但它最终还会显示一些索引名称以及关系名称,并显示cmax,cmin,ctid等属性,这些属性不是我在构造表时创建的实际属性。这是我的疑问:
SELECT
ns.nspname AS schema_name,
idx.attrelid :: REGCLASS AS table_name,
idx.attname AS column_name
FROM pg_attribute AS idx
JOIN pg_class AS i
ON i.oid = idx.attrelid
JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
WHERE nspname='public';
答案 0 :(得分:1)
要过滤掉系统属性,请添加attnum > 0
。要过滤掉非表格,请添加relkind = 'r'
。它看起来像
SELECT
ns.nspname AS schema_name,
idx.attrelid :: REGCLASS AS table_name,
idx.attname AS column_name
FROM pg_attribute AS idx
JOIN pg_class AS i
ON i.oid = idx.attrelid
JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
WHERE nspname='public' AND attnum > 0 AND relkind = 'r';
您还可以使用信息架构,这在这方面更加用户友好:
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'public';