plpgsql_check. Средство контроля plpgsql#
Версия: 2.5.
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: plpgsql.
Схема размещения:
ext.
Расширение plpgsql_check - это полноценный статический анализатор кода plpgsql для PostgreSQL, предоставляющий набор функций для анализа и профилирования функций и процедур, написанных на языке PL/pgSQL.
Функциональные возможности расширения:
анализ SQL внутри процедур и поиска ошибок, которые обычно не обнаруживаются при выполнении команды
CREATE PROCEDURE/FUNCTION;контроль уровней многих предупреждений и подсказок;
добавление маркеров
PRAGMAдля изменения уровеня отображения сообщений, о которых уже известно, или напоминания вернуться к ним для более глубокого анализа позже.
Помимо статического анализа расширение предоставляет возможность динамического анализа кода с отслеживанием выполнения функций (в том числе триггерных) и процедур на языке pl/pgsql.
Доработка#
Не производилась.
Ограничения#
Для корректной работы plpgsql_check необходимо наличие расширения plpgsql.
Внимание!
Использование расширения в пассивном режиме может влиять на производительность при сборе и хранении в статистике данных, переданных в параметрах функции, поэтому пассивный режим работы расширения не рекомендован к использованию в промышленной среде.
Установка#
Установка расширения:
cd {путь к дистрибутиву pangolin}/3rdparty/plpgsql_check
tar -C "/" -xzf plpgsql_check.tar.gz
Для использования расширения на развернутой СУБД необходимо установить его в целевую БД:
CREATE EXTENSION plpgsql_check SCHEMA ext;
Расширение может быть добавлено в shared_preload_libraries:
shared_preload_libraries = 'plpgsql_check'
В случае, если расширение используется совместно с расширением pldebugger, библиотека расширения должна быть указана после pldebugger при перечислении в shared_preload_libraries:
shared_preload_libraries = 'plugin_debugger,plpgsql_check'
Настройка#
Расширение может работать в нескольких режимах:
активный (статический анализ кода) - расширение никак не настраивается и не работает в фоне. Вся информация о функциях получается путем ручного вызова функций;
пассивный - функции расширения запускаются не вручную, а автоматически перед запуском отлаживаемой функции;
профилирования нагрузки - расширение собирает статистику о запусках и работе функций, а также выражений в теле функций. Статистика хранится в памяти сеанса, при добавлении библиотеки расширения в
shared_preload_librariesиспользуется общая разделяемая память и статистика хранится в общей памяти СУБД;трассировки - каждый вызов любой
plpgsql-функции сопровождается подробной информацией о выполняемой в текущий момент строке кода функции.
Конфигурационные параметры расширения#
Конфигурационные параметры:
Параметр |
Значение по умолчанию |
Описание |
|---|---|---|
|
on |
Выполнение проверок, указанных в ASSERT-инструкциях |
|
off |
Вывод предупреждения о совместимости |
|
off |
Включение функциональности трассировщика |
|
on |
Остановка работы |
|
by_function |
Выбор режима расширенной проверки ( |
|
off |
Фоновое профилирование функции |
|
15000 |
Максимальное количество выражений в общей памяти |
|
off |
Изменение формата вывода для регрессионного тестирования |
|
off |
Вывод дополнительных предупреждений (кроме предупреждений о производительности) |
|
off |
Вывод всех предупреждений (кроме предупреждений о производительности) |
|
off |
Вывод предупреждений о производительности |
|
off |
Отслеживание ASSERT-оператора |
|
default |
Детализация ASSERT-инструкции ( |
|
off |
Включение функции трассировки |
|
notice |
Установка уровня сообщения трассировщика ( |
|
off |
Вывод трассировщика в формате для регрессионного тестирования |
|
1024 |
Максимальная выходная длина содержимого переменных трассировщика в байтах |
|
вуафгде |
Детализация вывода трассировщика ( |
Использование модуля#
Функции расширения (с аргументами и возвращаемыми значениями можно ознакомиться по ссылке https://github.com/okbob/plpgsql_check:
Имя |
Описание |
|---|---|
__plpgsql_show_dependency_tb() |
Обнаружение зависимостей для функции |
plpgsql_check_function() |
Расширенная проверка (статический анализ кода) функции с выводом в виде форматированного текста |
plpgsql_check_pragma() |
Реализация функции |
plpgsql_check_profiler() |
Проверка/установка статуса профайлера |
plpgsql_check_tracer() |
Проверка/установка статуса трассировщика |
plpgsql_coverage_branches() |
Расчет показателя покрытия профилировщиком вариантов использования функции |
plpgsql_coverage_statements() |
Расчет показателя покрытия профилировщиком строк с выражениями в функции |
plpgsql_profiler_function_statements_tb() |
Отображение собранного профиля функции в виде таблицы |
plpgsql_profiler_function_tb() |
Отображение собранного профиля функции в виде таблицы |
plpgsql_profiler_functions_all() |
Отображение собранных профилей всех функций в виде таблицы |
plpgsql_profiler_install_fake_queryid_hook() |
Отображение собранных профилей всех функций в виде таблицы |
plpgsql_profiler_remove_fake_queryid_hook() |
Очистка сгенерированного функцией |
plpgsql_profiler_reset() |
Очистка статистики, собранной профайлером и относящейся к переданной в аргументе функции |
plpgsql_profiler_reset_all() |
Очистка всей статистики, собранной профайлером |
plpgsql_show_dependency_tb() |
Обнаружение зависимостей для функции |
Ссылки на документацию разработчика#
plpgsql_check: https://github.com/okbob/plpgsql_check.