Re: How to execute 'set session role' from plpgsql function?

Поиск
Список
Период
Сортировка
От Albe Laurenz
Тема Re: How to execute 'set session role' from plpgsql function?
Дата
Msg-id D960CB61B694CF459DCFB4B0128514C20267A1FE@exadv11.host.magwien.gv.at
обсуждение исходный текст
Ответ на How to execute 'set session role' from plpgsql function?  (Олег Василенко<pulp@mail.ru>)
Ответы Re: How to execute 'set session role' from plpgsql function?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Олег Василенко wrote:
> I wish to have a function with code above, but compiller generate
> syntactic error at the line "SET SESSION ROLE wishedrole;".
>
> How to pass the wishedrole value to the structure?
>
> CREATE OR REPLACE FUNCTION f_switch_role(INOUT text,INOUT boolean) AS
>  $BODY$
>  DECLARE
>    wishedrole ALIAS FOR $1;
>    resetrole ALIAS FOR $2;
>  BEGIN
>    if resetrole=true then
>             RESET ROLE;
>             RETURN;
>    end if;
>
> >>>>ERROR OCURS AT THE NEXT LINE <<<<<<
>    SET SESSION ROLE wishedrole;

You need to use dynamic SQL, e.g.

   EXECUTE 'SET SESSION ROLE "' || lower(regexp_replace(wishedrole, '"', '', 'g')) || '"';

>    RETURN;
>
>  END;
>  $BODY$
>  LANGUAGE 'plpgsql' VOLATILE

The "lower" and "regexp_replace" are there to prevent SQL injection.

Yours,
Laurenz Albe

В списке pgsql-general по дате отправления:

Предыдущее
От: Klint Gore
Дата:
Сообщение: 8.3.3 win32 crashing
Следующее
От: Ivan Sergio Borgonovo
Дата:
Сообщение: Re: NOT DEFERRABLE as default, why and how to manage it.