列出PostgreSQL中与模式和​​列的所有关系

时间:2016-05-08 12:08:04

标签: 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';

1 个答案:

答案 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';