Pierwsze rozwiązanie
Składnia SET
jest:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
gdzie value
to nowa wartość dla danego configuration_parameter
.
Aby przypisać wartość przechowywaną w _user_id
zmiennej, musisz wygenerować polecenie dynamiczne, a następnie EXECUTE
to.
Byłby to sposób na zrobienie tego:
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;
$$;
Dołączanie SQL Fiddle link do celów testowych.
Uwaga:
quote_nullable()
funkcja zwróciNULL
jeśli argument wejściowy ma wartość null. W twoim przypadku może to nie być konieczne.
Drugie rozwiązanie
Możesz również osiągnąć to samo z set_config()
funkcjonować jako @a_koń_bez_imienia. Twoja funkcja wyglądałaby wtedy tak:
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;
$$;
Dołączanie SQL Fiddle link do celów testowych.
Uwaga:
- Musisz jawnie rzutować drugi argument na typ varchar
PERFORM
służy do oceny wyrażenia i odrzucenia wyniku, ponieważ nie jest potrzebny- Możesz użyć
quote_nullable()
tutaj również działają