Как увидеть определенные комментарии к объектам базы данных? - PullRequest
0 голосов
/ 05 мая 2018

Основная мотивация для использования 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 голосов
/ 05 мая 2018
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 возвращает комментарий для объект базы данных, указанный его OID и именем содержащего системный каталог. Например, obj_description (123456, 'pg_class') будет получить комментарий для таблицы с OID 123456. Однопараметрический Форма obj_description требует только OID объекта. Это устарело поскольку нет гарантии, что идентификаторы OID уникальны в разных системные каталоги; следовательно, неправильный комментарий может быть возвращен.

функции oids хранятся в pg_proc, таблицы и представления в pg_class (relkind r и v соответственно), таким образом:

  1. select * from obj_description('t.fn'::regproc)
  2. pg_class для таблиц и представлений, pg_proc для функций
  3. ниже приведены запросы:

для всех функций (я добавляю 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...