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

Use variable as role name in function postgresql

不能使用变量作为角色名

我尝试创建带有插入触发器的函数, 对给定的 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"

声明完美无缺。

试试这个:

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