我正在尝试使用系统目录构造列出 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';
Run Code Online (Sandbox Code Playgroud)
要过滤掉系统属性,请添加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';
Run Code Online (Sandbox Code Playgroud)
您还可以使用信息模式,它在这方面对用户更友好:
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'public';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3306 次 |
| 最近记录: |