Я пытаюсь работать с 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
, но, похоже, не работает с локальными настройками.