微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PostgreSQL中获取表注释列表

如何解决在PostgreSQL中获取表注释列表

| Postgresql允许向表等对象添加注释。例如,我已经使用以下sql命令在表\“ mytable \”中添加了注释:
COMMENT ON TABLE mytable IS \'This is my table.\';
我的问题是: 如果我想使用sql命令来获取所有表以及它们各自的注释-我该怎么做?什么是合适的查询呢? 提前致谢! 干杯!     

解决方法

所有评论都存储在pg_description中 要获得对表的注释,您需要将其加入pg_class 或者,您也可以使用函数
obj_description()
检索此信息:
SELECT obj_description(oid)
FROM pg_class
WHERE relkind = \'r\'
编辑 在psql中,您可以简单地使用
\\d+
命令显示所有表及其注释。或使用
\\dd
命令显示系统中的所有注释     ,我为
obj_description
使用了一个有用的别名(façade),它很容易使用,因为表名(
relname
)是一个varchar,并且可以用一个单独的字段表示模式名,如在主表和查询中一样。
 CREATE FUNCTION rel_description(
     p_relname varchar,p_schemaname varchar DEFAULT NULL
 ) RETURNS text AS $f$
    SELECT obj_description((CASE 
       WHEN strpos($1,\'.\')>0 THEN $1
       WHEN $2 IS NULL THEN \'public.\'||$1
       ELSE $2||\'.\'||$1
            END)::regclass,\'pg_class\');
 $f$ LANGUAGE SQL;
 -- EXAMPLES OF USE:
 -- SELECT rel_description(\'mytable\'); 
 -- SELECT rel_description(\'public.mytable\'); 
 -- SELECT rel_description(\'otherschema.mytable\'); 
 -- SELECT rel_description(\'mytable\',\'otherschema\'); 
 -- PS: rel_description(\'public.mytable\',\'otherschema\') is a syntax error,--     but not generates exception: returns the same as (\'public.mytable\') 
笔记: 注释是使用表名而不是OID生成的。\“如何使用表名检索注释?\” 选择obj_description(\'schemaName.tableName \':: regclass,\'pg_class \'); 关于仅带object_oid的obj_description(例如393862),
obj_description(393862)
,已弃用,正确的是 选择obj_description(393862,\'pg_class \'); 按照此答案的建议:\“如果您想知道在与\\ dt +或\\ d +客户打交道时psql会运行哪些查询,只需用
psql -E
\启动它。” PS:感谢@a_horse_with_no_name。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。