PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Définition d'une option personnalisée dans une procédure stockée

Première solution

Syntaxe pour SET est :

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }

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 renverrait NULL 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