První řešení
Syntaxe pro SET
je:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
kde value
je nová hodnota pro daný configuration_parameter
.
Aby bylo možné přiřadit hodnotu uloženou v _user_id
proměnnou, musíte vygenerovat dynamický příkaz a poté EXECUTE
to.
Toto by byl způsob, jak to udělat:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
EXECUTE 'SET my.user_id TO ' || quote_nullable(_user_id);
END;
$$;
Připojuji SQL Fiddle odkaz pro testovací účely.
Poznámka:
quote_nullable()
funkce vrátíNULL
pokud je vstupní argument null. Ve vašem případě to nemusí být nutné.
Druhé řešení
Stejné věci můžete dosáhnout také pomocí set_config()
fungovat jako @a_horse_with_no_name. Vaše funkce by pak vypadala takto:
CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true)
RETURNS void
LANGUAGE PLPGSQL
AS $$
BEGIN
PERFORM set_config('my.user_id', _user_id::TEXT, false);
END;
$$;
Připojuji SQL Fiddle odkaz pro testovací účely.
Poznámka:
- Musíte explicitně přetypovat druhý argument na typ varchar
PERFORM
se používá k vyhodnocení výrazu a zahození výsledku, protože to není potřeba- Mohli byste použít
quote_nullable()
fungovat i zde