Проверить значение с помощью current_setting()
Я пытаюсь работать с current_setting()
.
Я придумал это:
CREATE OR REPLACE FUNCTION process_audit() RETURNS TRIGGER AS $audit$
DECLARE
user_id integer;
BEGIN
BEGIN
user_id := current_setting('hws.current_user_id');
EXCEPTION WHEN OTHERS THEN
user_id := NULL;
END;
...
RETURN NULL;
END;
$audit$ LANGUAGE plpgsql;
Настройка устанавливается с помощью:
SELECT set_config('hws.current_user_id', '5', true); -- true = local setting -> only visible in current transaction
Проблема заключается в том, что current_setting()
генерирует исключение, если значение недопустимо. Я не хочу использовать EXCEPTION
, потому что я читаю, что блоки исключений дороги.
Есть ли способ проверить, имеет ли значение значение без использования исключений?
Btw: Я также пытался читать из pg_settings
, но, похоже, не работает с локальными настройками.
Ответы
Ответ 1
9.6 и новее:
PostgreSQL (9.6+) поддерживает current_setting('setting_name', 't')
для получения настроек и возврата NULL
, если он не установлен. вы можете объединить это с coalesce
, чтобы указать значение по умолчанию.
9,5 и старше:
В этом вопросе вы можете сделать это с помощью функции plpgsql
, которая использует обработчик BEGIN ... EXCEPTION
, если вы не против удара производительности и неуклюжести. Но нет встроенной поддержки.
Ответ 2
Разве вы не должны сделать бросок? Следующее,
user_id := current_setting('hws.current_user_id')::integer;