Когда я анализирую код в редакторе PgAdmin, часто возникает потребность в просмотре кода какой-либо функции.
Вижу например, вызов функции и мне хочется детально посмотреть, что она делает. В продвинутых редакторах кода, таких как PHPStorm (естесственно для PHP, а не sql) достаточно кликнуть по наименованию функции и можно будет посмотреть код этой функции в отдельной вкладке.
PgAdmin, к сожалению, такими возможностями не обладает. Раньше, для просмотра кода функции мне приходилось искать соответствующий файл среди своих исходников в git-репозитории. Если файл не находился по наименованию - приходилось выполнять полнотекстовый поиск с помощью Far. Однако с добавлением удобнейшего запроса в макросы PgAdmin уже не приходится осуществлять такой поиск.
Указанный ниже запрос выдает следующие столбцы:
Вижу например, вызов функции и мне хочется детально посмотреть, что она делает. В продвинутых редакторах кода, таких как PHPStorm (естесственно для PHP, а не sql) достаточно кликнуть по наименованию функции и можно будет посмотреть код этой функции в отдельной вкладке.
PgAdmin, к сожалению, такими возможностями не обладает. Раньше, для просмотра кода функции мне приходилось искать соответствующий файл среди своих исходников в git-репозитории. Если файл не находился по наименованию - приходилось выполнять полнотекстовый поиск с помощью Far. Однако с добавлением удобнейшего запроса в макросы PgAdmin уже не приходится осуществлять такой поиск.
Указанный ниже запрос выдает следующие столбцы:
- sql_text - команда вызова функции (если понадобится вызвать функцию со своими аргументами)
- Schema - схема, где находится функция
- Name - наименование функции
- Result data type - результирующий тип данных функции
- Argument data types - входные переменные для функции
- Function text - полный код функции
- Argument data types without defaults - входные аргументы функции без значений по-умолчанию
- Type - тип функции (agg - агрегатная, window - оконная функция, trigger - триггерная функция, normal - обычная функция)
SELECT 'select ' || n.nspname || '.' || p.proname || '(' || pg_catalog.pg_get_function_arguments(p.oid) || ') for update;' as sql_text, n.nspname as "Schema", p.proname as "Name", pg_catalog.pg_get_function_result(p.oid) as "Result data type", pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types", pg_get_functiondef(p.oid) as "Function text", pg_get_function_identity_arguments(p.oid) as "Argument data types without defaults", CASE WHEN p.proisagg THEN 'agg' WHEN p.proiswindow THEN 'window' WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger' ELSE 'normal' END as "Type" FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE (p.proname ilike '%' || trim('$SELECTION$') || '%') ORDER BY 1, 2, 4;Пример работы функции:После введения данного макроса стало намного проще анализировать код.
Не нужно искать в исходниках или в дереве PgAdmin текст функции -
проще вспомнить ее примерное наименование, написать его, выделить и
выполнить макрос.
В появившейся таблице в поле function text
достаточно будет скопировать текст и вставить в отдельное окно
редактора, чтобы произвести анализ.
Работа над проектом из-за этого макроса значительно ускорилась.
Работа над проектом из-за этого макроса значительно ускорилась.