Когда серверные функции становятся достаточно большими, то искать ошибки и медленные места становится тяжеловато. Помочь может вывод отладочной информации с помощью оператора RAISE.
У этой команды есть несколько вариантов, но в нашем случае нужен вот такой синтаксис:
1 |
RAISE [ level ] 'format' [, expression [, ... ]] |
level — уровень сообщения. Может быть DEBUG, LOG, INFO, NOTICE, WARNING или EXCEPTION. Для отладки можно использовать уровень DEBUG, а EXCEPTION означает ошибку. По умолчанию используется уровень сообщения EXCEPTION, что прерывает выполнение транзакции.
format — строка с сообщением. Можно использовать символ «%» для подстановки значений из expression.
expression — значения, которые будут подставляться в format.
Пример использования:
1 |
RAISE DEBUG '% make_actual_calculation: temp_shift_link cnt1=%', now(), (SELECT COUNT(1) FROM temp_shift_link)::character varying; |
Что выведет примерно такое сообщение:
1 |
ОТЛАДКА: 2016-01-10 11:18:46.09+04 make_actual_calculation: temp_shift_link cnt1=5 |
Логи можно смотреть в «C:\Program Files\PostgreSQL\9.3\data\pg_log» в случае Windows и во вкладке «Сообщения» в pgAdmin III.
По умолчанию сообщения с уровнем логгирования DEBUG не показываются, чтобы включить их нужно внести изменения в файл «postgresql.conf», который в случае с Windows находится по пути «C:\Program Files\PostgreSQL\9.3\data\postgresql.conf». Там нужно раскомментировать и поправить строки:
1 2 3 4 |
... client_min_messages = debug5 log_min_messages = debug5 ... |