在PostgreSQL中列出所有带有模式和列的关系

4

我正在尝试使用系统目录构造在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';
1个回答

7
为了过滤掉系统属性,请添加 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';

您也可以使用信息模式(information schema),在这方面它更加用户友好:
SELECT table_schema, table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'public';

谢谢,这解决了我的问题 :) - Ankur Sinha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接