获取PostgreSQL中的表注释列表

时间:2011-04-14 13:35:58

标签: sql postgresql

Postgresql允许向诸如表之类的对象添加注释。例如,我使用此SQL命令在表“mytable”中添加了注释:

COMMENT ON TABLE mytable IS 'This is my table.';

我的问题是: 如果我想使用SQL命令获取所有表及其各自的注释 - 我将如何做到这一点?对此有什么合适的查询?

提前致谢! 干杯!

3 个答案:

答案 0 :(得分:37)

所有评论都存储在pg_description

要获得对表格的评论,您需要将其加入pg_class

作为替代方案,您还可以使用函数obj_description()来检索此信息:

SELECT obj_description(oid)
FROM pg_class
WHERE relkind = 'r'

修改

在psql中,您只需使用\d+命令即可​​显示所有表,包括其注释。或使用\dd命令显示系统中的所有注释

答案 1 :(得分:4)

我正在为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') 

注意:

  • 评论生成with the table name,而不是OID ...“如何使用表名检索评论?”

    SELECT obj_description('schemaName.tableName':: regclass,'pg_class');

  • 关于只有object_oid(例如393862),obj_description(393862)it is deprecated的obj_description,正确的是

    SELECT obj_description(393862,'pg_class');

  • 根据this answer的建议:“如果您想知道在执行\ dt +或\ d +客户时psql运行了哪些查询,只需使用psql -E

PS:感谢@a_horse_with_no_name。

答案 2 :(得分:1)

您可以使用pg_catalog.obj_description函数和information_schema.tables模式视图:

SELECT t.table_name, pg_catalog.obj_description(pgc.oid, 'pg_class')
FROM information_schema.tables t
INNER JOIN pg_catalog.pg_class pgc
ON t.table_name = pgc.relname 
WHERE t.table_type='BASE TABLE'
AND t.table_schema='public';

FUNCTIONS-INFO-COMMENT-TABLE

INFORMATION_SCHEMA Support in MySQL, PostgreSQL