Как получить комментарий к базе данных PostgreSQL? - программирование
Подтвердить что ты не робот

Как получить комментарий к базе данных PostgreSQL?

Недавно я обнаружил, что вы можете прикрепить комментарий ко всем типам объектов в PostgreSQL. В частности, меня интересует игра с комментарием базы данных. Например, чтобы установить комментарий базы данных:

COMMENT ON DATABASE mydatabase IS 'DB Comment';

Однако, что такое противоположный оператор, получить комментарий mydatabase?

В командной строке psql я вижу комментарий вместе с другой информацией в результате команды \l+; который я мог бы использовать с помощью awk для достижения моей цели. Но я предпочел бы использовать инструкцию SQL, если это возможно.

4b9b3361

Ответ 1

Чтобы получить комментарий к базе данных, используйте следующий запрос:

select description from pg_shdescription
join pg_database on objoid = pg_database.oid
where datname = '<database name>'

Этот запрос получит вам комментарий таблицы для имени данной таблицы:

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
where relname = '<your table name>'

Если вы используете одно и то же имя таблицы в разных схемах, вам нужно немного изменить его:

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
join pg_namespace on pg_class.relnamespace = pg_namespace.oid
where relname = '<table name>' and nspname='<schema name>'

Ответ 2

Во-первых, ваш запрос на комментарии к таблице может быть упрощен с использованием приведения в соответствующий тип идентификатора объекта

SELECT description
FROM   pg_description
WHERE  objoid = 'myschema.mytbl'::regclass;

Часть схемы необязательна. Если вы его опустите, ваш текущий search_path определяет видимость любой таблицы с именем mytbl.

Еще лучше, в PostgreSQL есть выделенные функции, чтобы упростить и канонизировать эти запросы. Руководство:

obj_description( object_oid, catalog_name )... получить комментарий для объект базы данных

shobj_description( object_oid, catalog_name )... получить комментарий для объекта общей базы данных

Описание для таблицы:

SELECT obj_description('myschema.mytbl'::regclass, 'pg_class');

Описание для базы данных:

SELECT pg_catalog.shobj_description(d.oid, 'pg_database') AS "Description"
FROM   pg_catalog.pg_database d
WHERE  datname = 'mydb';

Как вы узнали об этом?

Хорошо, чтение превосходного руководства - это просветление.:)
Но в этом случае существует более прямой маршрут: большинство метаданных psql реализованы с использованием простого SQL. Начните сеанс с psql -E, чтобы увидеть магию за занавесками. Руководство:

-E
--echo-hidden

Выполните эховые запросы, сгенерированные с помощью \d и других команд обратной косой черты. Вы можете использовать это для изучения внутренних операций psql. Эта эквивалентно установке переменной ECHO_HIDDEN на on.

Ответ 3

Для таблиц попробуйте

\dd TABLENAME

Это показывает комментарий, который я добавил в таблицу

Ответ 4

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

SELECT RelName,Description 
FROM pg_Description
JOIN pg_Class 
ON pg_Description.ObjOID = pg_Class.OID
WHERE ObjSubID = 0

Ответ 5

Этот запрос вернет комментарий таблицы

 SELECT obj_description('public.myTable'::regclass)
 FROM pg_class
 WHERE relkind = 'r' limit 1