在函数postgresql中使用变量作为角色名称

时间:2019-05-22 07:42:34

标签: postgresql plpgsql

不能使用变量作为角色名称

我试图在插入时创建带有触发器的函数,对给定的ID执行一些授权语句。我用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 :(得分:0)

尝试:

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$;