Erste Lösung
Syntax für SET
ist:
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
wobei wert
ist der neue Wert für einen gegebenen configuration_parameter
.
Um einen in _user_id
gespeicherten Wert zuzuweisen Variable müssen Sie einen dynamischen Befehl generieren und dann AUSFÜHREN
es.
Dies wäre der Weg, das zu tun:
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;
$$;
Anhängen von SQL Fiddle Link zu Testzwecken.
Hinweis:
quote_nullable()
Funktion würdeNULL
zurückgeben wenn das Eingabeargument null ist. In Ihrem Fall ist dies möglicherweise nicht erforderlich.
Zweite Lösung
Dasselbe könnten Sie auch mit
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;
$$;
Anhängen von SQL Fiddle Link zu Testzwecken.
Hinweis:
- Sie müssen das zweite Argument explizit in einen Varchar-Typ umwandeln
PERFORM
wird verwendet, um einen Ausdruck auszuwerten und das Ergebnis zu verwerfen, da es nicht benötigt wird- Sie könnten
quote_nullable()
verwenden funktionieren auch hier