如何解决在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 举报,一经查实,本站将立刻删除。