Получение списка комментариев к таблице в PostgreSQL - PullRequest
30 голосов
/ 14 апреля 2011

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

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

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

Заранее спасибо!Ура! * * 1006

Ответы [ 2 ]

38 голосов
/ 14 апреля 2011

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

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

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

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

Редактировать

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

4 голосов
/ 05 октября 2012

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

  • о 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...