Используйте переменную в качестве имени роли в функции postgresql - PullRequest
1 голос
/ 22 мая 2019

Невозможно использовать переменную в качестве имени роли.

Я пытался создать функцию с триггером при вставке, чтобы выполнить несколько операторов предоставления для заданных идентификаторов.Я объявил некоторую переменную со значением id и должен использовать ее в качестве имени роли.

CREATE OR REPLACE FUNCTION permissions() RETURNS trigger
    LANGUAGE plpgsql
    AS $permissions$
    DECLARE
        id varchar  := NEW."id"; --this variable will contain user name ex. "valid.user"
    BEGIN
        GRANT USAGE ON SCHEMA zakupy TO id;
        RETURN NEW;
    END;
$permissions$;

CREATE TRIGGER permissions_insert AFTER INSERT ON public.permissions FOR EACH ROW EXECUTE PROCEDURE permissions();

Когда я добавляю новую строку, у меня появляется сообщение об ошибке ОШИБКА: роль "id" не существует.Если я заменяю id на «valid.user»:

GRANT USAGE ON SCHEMA zakupy TO "valid.user"

оператор работает отлично.

1 Ответ

0 голосов
/ 22 мая 2019

попробуйте это:

CREATE OR REPLACE FUNCTION permissions() RETURNS trigger
LANGUAGE plpgsql
AS $permissions$
DECLARE
    id varchar  := NEW."id"; --this variable will contain user name ex. "valid.user"
BEGIN
    execute 'GRANT USAGE ON SCHEMA zakupy TO "'||id||'"';
    RETURN NEW;
END;
$permissions$;
...