Выборка источника объекта программно

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

С помощью различных инструментов 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.)

Другие вопросы по тегам