Première solution
Syntaxe pour SET
est :
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
où value
est la nouvelle valeur pour un configuration_parameter
donné .
Pour attribuer une valeur stockée dans _user_id
variable, vous devez générer une commande dynamique puis EXECUTE
il.
Voici comment procéder :
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;
$$;
Attachement de SQL Fiddle lien à des fins de test.
Remarque :
quote_nullable()
la fonction renverraitNULL
si l'argument d'entrée est nul. Cela peut ne pas être nécessaire dans votre cas.
Deuxième solution
Vous pouvez également obtenir la même chose avec set_config()
fonction comme @a_horse_with_no_name noté. Votre fonction ressemblerait alors à ceci :
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;
$$;
Attachement de SQL Fiddle lien à des fins de test.
Remarque :
- Vous devez convertir explicitement le deuxième argument en un type varchar
PERFORM
est utilisé pour évaluer une expression et rejeter le résultat puisqu'il n'est pas nécessaire- Vous pouvez utiliser
quote_nullable()
fonctionner ici aussi