Профилирование хранимых процедур в PostgreSQL не является тривиальной задачей. Сложность заключается в том, что в журнал попадает обобщенное время выполнения хранимой процедуры. Таким образом, если Ваша хранимая процедура вызывает какие-то запросы или другие хранимые процедуры, в журнал попадет исключительно суммарное время выполнения.
Что касается трассировки выполнения вложенных в процедуру вызовов других функций, существенно облегчить задачку может установка переменной track_functions
в значение pl
. Например,
SET track_functions TO pl;
После вызова желаемой функции в таблице pg_stat_user_functions
будет суммарная статистика о ней.
Для более детального профилирования можно воспользоваться RAISE LOG или модулем log_functions. О использовании первого очень подробно рассказывается в руководстве PROFILING STORED PROCEDURES/FUNCTIONS, второго — Profiling PL/pgsql functions. Для второго подхода потребуется собрать дополнительный модуль для PostgreSQL. Однако у него есть и неоспоримое преимущество — он не потребует модификации исходной хранимой процедуры, что обязательно потребуется в случае использования RAISE LOG
.