Как получить комментарий к базе данных PostgreSQL?
Недавно я обнаружил, что вы можете прикрепить комментарий ко всем типам объектов в PostgreSQL. В частности, меня интересует игра с комментарием базы данных. Например, чтобы установить комментарий базы данных:
COMMENT ON DATABASE mydatabase IS 'DB Comment';
Однако, что такое противоположный оператор, получить комментарий mydatabase
?
В командной строке psql
я вижу комментарий вместе с другой информацией в результате команды \l+
; который я мог бы использовать с помощью awk для достижения моей цели. Но я предпочел бы использовать инструкцию SQL, если это возможно.
Ответы
Ответ 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