PostgreSQL查询表列注释?

4
我已将MySQL数据库迁移到PostgreSQL并替换了查询:
SHOW FULL COLUMNS FROM schema_name.table_name;
使用PostgreSQL的等效查询:
SELECT * FROM information_schema.columns WHERE table_schema = 'schema_name' and table_name = 'table_name';
它能够返回列以及它们的属性。然而,MySQL查询中返回的“Comment”属性在PostgreSQL查询中未返回。
有一种方法可以查询与每个column_name相关联的注释吗?

@mpen 建议的重复地址表注释虽然相似,但并没有明确回答我的关于“列”注释的问题,这需要不同的方法。 - Don
2个回答

9
这个怎么样:
select col_description((table_schema||'.'||table_name)::regclass::oid, ordinal_position) as column_comment
, * from information_schema.columns 
WHERE table_schema = 'schema_name' 
and table_name = 'table_name';

3

当你使用\dt+时,可以看到下面的内容。你也可以通过使用-E来逆向工程psql的操作。

-E --echo-hidden 回显由\d和其他反斜杠命令生成的实际查询语句。您可以使用此功能来研究psql的内部操作。这相当于将变量ECHO_HIDDEN设置为on。

psql -d test -E -c'\dt+ foo'
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner",
  pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "Size",
  pg_catalog.obj_description(c.oid, 'pg_class') as "Description"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','s','')
      AND n.nspname !~ '^pg_toast'
  AND c.relname ~ '^(foo)$'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************

您可以在此处查看psql显示的所有信息。正如人们所说,授人以鱼不如授人以渔...?

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