2

Can't use variable as role name

I tried to create function with trigger on insert, witch perform some grant statements for given id's. I declared some variable with id value and have to use it as role name.

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();

When I add new row i have error message ERROR: role "id" does not exist. If I replace id to "valid.user":

GRANT USAGE ON SCHEMA zakupy TO "valid.user"

statement works perfectly.

1 Answer 1

1

try this :

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$;
Sign up to request clarification or add additional context in comments.

1 Comment

Works perfektly. Thank you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.