列出与 PostgreSQL 中的架构和列的所有关系

Ank*_*nha 2 postgresql

我正在尝试使用系统目录构造列出 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)

Pet*_*aut 5

要过滤掉系统属性,请添加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)