Подтвердить что ты не робот

Получение списка комментариев в PostgreSQL

Postgresql позволяет добавлять комментарии к таким объектам, как таблицы. Например, я добавил комментарий к таблице "mytable", используя эту команду SQL:

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

Мой вопрос: Если я хочу использовать SQL-команду для получения всех таблиц вместе с их соответствующим комментарием - как бы я это сделал? Каким будет подходящий запрос для этого?

Спасибо заранее! Ура!

4b9b3361

Ответ 1

Все комментарии хранятся в pg_description

Чтобы получить комментарии к таблице, вам необходимо присоединиться к ней pg_class

В качестве альтернативы вы также можете использовать функцию obj_description() для получения этой информации:

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

Edit

В psql вы можете просто использовать команду \d+, чтобы показать все таблицы, включая их комментарии. Или используйте команду \dd, чтобы показать все комментарии в системе

Ответ 2

Я использую полезный псевдоним (façade) для obj_description, который прост в использовании, потому что имя таблицы (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... "Как получить комментарий с именем таблицы?"

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

  • about obj_description только с object_oid (например, 393862), obj_description(393862), он устарел, правильный

    SELECT obj_description (393862, 'pg_class');

  • Как рекомендовано этим ответом: "Если вы хотите узнать, какие запросы выполняются psql, когда вы делаете клиентов \dt + или \d +, просто запустите его с psql -E".

PS: благодаря @a_horse_with_no_name.