使用COMMENT ON IS的主要动机是生成智能文档报告,并通过SQL对其进行操作。
指南postgresql.org/docs/functions-info 不解释(很难看)。我尝试直观SELECT obj_description('schemaName.tableName'::regclass)
并幸运地工作......但我需要
对函数名称执行相同操作,但name::regclass
不适用于函数。
要查看catalog_name
是什么?对于函数,表和视图。
如何轻松(现在2018年)列出架构的所有功能或所有表格?
答案 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_proc
,pg_class
(relkind
r
和v
中的表格和视图中),因此:
select * from obj_description('t.fn'::regproc)
pg_class
表格和观点,pg_proc
表示功能用于所有函数(我添加order
和limit
以显示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)