Уменьшить беспокойство в plpgsql
У меня есть функция, которая использует временную таблицу, которая должна быть удалена, если существует.
drop table if exists t_xy;
create temp table t_xy on commit drop as select ...;
Впоследствии я использую эту функцию в представлении. Функция вызывается много раз, пока выполняется выбор. Мне нравится использовать команду "повысить уведомление", потому что это почти единственный надежный способ сообщить о любых переменных в функциях в целях отладки. Проблема в том, что я должен искать их в огромном количестве нежелательных строк, таких как:
ВНИМАНИЕ: таблица "t_xy" не существует, пропуск КОНТЕКСТ: оператор SQL "удалить таблицу, если существует t_xy" Функция PL/pgSQL f_pending_operations(uuid) line5 в команде SQL
Есть ли способ подавления таких уведомлений, которые не были сгенерированы raise notice
команда, но по drop table if exists
или уронить другие предметы? Установка опции "client_min_messages" в "debug" усугубляет проблему.
1 ответ
Вы можете отключить уведомления для клиента от любой команды с локальной настройкой для client_min_messages
:
SET LOCAL client_min_messages=warning; -- "debug" would have opposite effect
DROP TABLE if exists t_xy;
RESET client_min_messages=warning; -- may or may not be needed
Эффекты
SET LOCAL
последний только до конца текущей транзакции
Если вы не выпускаете RESET
Вы эффективно отключаете уведомления для остальной части транзакции.
Кроме того, вы также можете установить client_min_messages
за вызов из командной строки:
Вы также можете уменьшить многословность сообщений с помощью параметра GUC:
set log_error_verbosity='terse';
которые, конечно, можно настроить на функциональном уровне.