Выборка источника объекта программно
Мне нужен доступ к полному исходному коду объектов, чтобы автоматизировать определенные задачи. Например: полный источник представления - это само представление, его правила, триггеры, привилегии...
С помощью различных инструментов PostgreSQL, таких как PgAdmin, pg_dump, psql, это можно легко получить, но мне нужно иметь доступ к нему через вызов функции (sql/plpgsql).
Не так сложно реализовать API, который выглядит следующим образом: getFunctionSource, getTableSource, getFUnctionSource. Тем не менее, похоже, что этот код потребует много обслуживания в разных версиях базы данных.
Существует ли официально поддерживаемое или хорошо протестированное расширение, API, оболочка pg_dump или что-то еще, что я могу использовать?
1 ответ
Если вы бежите psql -E
вы увидите скрытые запросы, которые запускает Postgres для вывода определений данных.
Например, необработанный источник функции можно найти, запустив \df foo
, читая запрос, а затем пытаясь:
select prosrc from pg_proc where proname = 'foo'
\sf foo
не дает соответствующих функций, использующих этот подход, но беглый взгляд на документы по системным информационным функциям (которых много) должен предположить, что это просто оболочка:
select pg_get_functiondef('foo'::regproc);
Несколько обзоров, с которых можно начать, если вы пойдете по пути размещения своих материалов на github:
https://gist.github.com/ddebernardy/7893922
(Вы захотите создать "системную" схему перед запуском файла, используя \i в psql.)