如何查看关于数据库对象的已定义注释?

时间:2018-05-05 16:05:23

标签: sql postgresql descriptor

使用COMMENT ON IS的主要动机是生成智能文档报告,并通过SQL对其进行操作。

指南postgresql.org/docs/functions-info 不解释(很难看)。我尝试直观SELECT obj_description('schemaName.tableName'::regclass)并幸运地工作......但我需要

  1. 对函数名称执行相同操作,但name::regclass不适用于函数。

  2. 要查看catalog_name是什么?对于函数,表和视图。

  3. 如何轻松(现在2018年)列出架构的所有功能或所有表格?

1 个答案:

答案 0 :(得分:1)

so=# create function t.fn() returns int as
$$
begin return 1; end; $$ language plpgsql;
CREATE FUNCTION
so=# comment on function t.fn() is 'some comment';
COMMENT
so=# select * from obj_description('t.fn'::regproc);
 obj_description
-----------------
 some comment
(1 row)

regclass用于关系,用于函数regproc

<强>更新

https://www.postgresql.org/docs/current/static/functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE

  

obj_description的双参数形式返回a的注释   由其OID指定的数据库对象和包含的名称   系统目录。例如,obj_description(123456,&#39; pg_class&#39;)会   使用OID 123456检索表的注释。单参数   obj_description的形式只需要对象OID。它已被弃用   因为不能保证OID在不同的地方是唯一的   系统目录;因此,可能会返回错误的评论。

函数oid存储在pg_procpg_classrelkind rv中的表格和视图中),因此:

  1. select * from obj_description('t.fn'::regproc)
  2. pg_class表格和观点,pg_proc表示功能
  3. 以下是查询:
  4. 用于所有函数(我添加orderlimit以显示UDF小列表):

    so=# select oid::regproc,obj_description(oid,tableoid::regclass::text) 
    from pg_proc 
    order by oid desc 
    limit 2;
     oid  | obj_description
    ------+-----------------
     t.fn | some comment
     a    | blah
    (2 rows) 
    
    所有表格的

    so=# select oid::regclass,obj_description(oid,tableoid::regclass::text) from pg_class where relkind = 'r' order by oid desc limit 1;
          oid      |   obj_description
    ---------------+---------------------
     t."WeirdMix$" | table with bad name
    (1 row)
    

    分别用于观点:

    so=# select oid::regclass,obj_description(oid,tableoid::regclass::text) from pg_class where relkind = 'v' order by oid desc limit 1;
     oid | obj_description
    -----+-----------------
     v   | view this is
    (1 row)