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
-функции сопровождается подробной информацией о выполняемой в текущий момент строке кода функции.
Конфигурационные параметры расширения
Конфигурационные параметры:
Параметр | Значение по умолчанию | Описание |
---|---|---|
check_asserts | on | Выполнение проверок, указанных в ASSERT-инструкциях |
compatibility_warnings | off | Вывод предупреждения о совместимости |
enable_tracer | off | Включение функциональности трассировщика |
fatal_errors | on | Остановка работы plpgsql при возникновении ошибки |
mode | by_function | Выбор режима расширенной проверки (disabled (для отключения), by_function (для ручного запуска функций проверки), fresh_start (для первого запуска проверяемой функции), every_start (для каждого запуска проверяемой функции) |
profiler | off | Фоновое профилирование функции |
profiler_max_shared_chunks | 15000 | Максимальное количество выражений в общей памяти |
regress_test_mode | off | Изменение формата вывода для регрессионного тестирования |
show_nonperformance_extra_warnings | off | Вывод дополнительных предупреждений (кроме предупреждений о производительности) |
show_nonperformance_warnings | off | Вывод всех предупреждений (кроме предупреждений о производительности) |
show_performance_warnings | off | Вывод предупреждений о производительности |
trace_assert | off | Отслеживание ASSERT-оператора |
trace_assert_verbosity | default | Детализация ASSERT-инструкции (terse/default/verbose ) |
tracer | off | Включение функции трассировки |
tracer_errlevel | notice | Установка уровня сообщения трассировщика (log/notice/info/debug/debug1/debug2/debug3/debug4/debug5 ) |
tracer_test_mode | off | Вывод трассировщика в формате для регрессионного тестирования |
tracer_variable_max_length | 1024 | Максимальная выходная длина содержимого переменных трассировщика в байтах |
tracer_verbosity | вуафгде | Детализация вывода трассировщика (terse/default/verbose ) |
Использование модуля
Функции расширения (с аргументами и возвращаемыми значениями можно ознакомиться по ссылке https://github.com/okbob/plpgsql_check:
Имя | Описание |
---|---|
__plpgsql_show_dependency_tb() | Обнаружение зависимостей для функции |
plpgsql_check_function() | Расширенная проверка (статический анализ кода) функции с выводом в виде форматированного текста |
plpgsql_check_pragma() | Реализация функции pragma . Существует два разных варианта использования: для статического анализа с помощью plpgsql_check , где аргументы считываются из дерева синтаксического анализа; для управления трассировкой кода во время выполнения (аргументы обрабатываются аналогичным для variadic text образом) |
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_install_fake_queryid_hook() идентификатора запроса и возврат предыдущего значения |
plpgsql_profiler_reset() | Очистка статистики, собранной профайлером и относящейся к переданной в аргументе функции |
plpgsql_profiler_reset_all() | Очистка всей статистики, собранной пр офайлером |
plpgsql_show_dependency_tb() | Обнаружение зависимостей для функции |
Ссылки на документацию разработчика
plpgsql_check: https://github.com/okbob/plpgsql_check.