It seems that the user does not exist:
CREATE OR REPLACE FUNCTION set_role()
RETURNS VOID
AS $$
BEGIN
RAISE NOTICE 'CURRENT_USER: %', (select current_user);
SET ROLE blabla;
RAISE NOTICE 'CURRENT_USER: %', (select current_user);
END;
$$ LANGUAGE plpgsql;
db=> select * from set_role();
NOTICE: CURRENT_USER: kofadmin
ERROR: role "blabla" does not exist
CONTEXT: SQL statement "SET ROLE blabla"
PL/pgSQL function set_role() line 4 at SQL statement
db=> CREATE ROLE blabla;
CREATE ROLE
db=> select * from set_role();
NOTICE: CURRENT_USER: kofadmin
ERROR: permission denied to set role "blabla"
CONTEXT: SQL statement "SET ROLE blabla"
PL/pgSQL function set_role() line 4 at SQL statement
db=> GRANT blabla TO kofadmin;
GRANT ROLE
Now it works:
db=> select * from set_role();
NOTICE: CURRENT_USER: kofadmin
NOTICE: CURRENT_USER: blabla
[...]
Regards
Charles