Уменьшить беспокойство в 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';

которые, конечно, можно настроить на функциональном уровне.

Другие вопросы по тегам