I'm trying to work with current_setting()
.
I came up with this:
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;
The setting is set via:
SELECT set_config('hws.current_user_id', '5', true); -- true = local setting -> only visible in current transaction
The problem is, that current_setting()
throws an exception if the value is not valid. I don't want to use EXCEPTION
because I read that exception blocks are expensive.
Is there a way to check if the setting has a value without using exceptions?
Btw: I also tried to read from pg_settings
but that doesn't seem to work with local settings.
SET LOCAL
andcurrent_settings
. Hope you find it useful :-) – Septavalent