我创建了以下组角色:
CREATE ROLE hr_user
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
然后我提供了一些登录角色新的群组角色权限:
GRANT hr_user TO "iris";
GRANT hr_user TO "jeff";
现在,我有一个查询显示所有工作人员是否有“hr_users”,如果不是,它只显示特定状态的用户:
select *
from users
where case when (select pg_has_role(select "current_user"(), 'hr_user'::name, 'MEMBER'::text)) then 1=1 else userstatus <>'Active' end
基本上这个查询意味着:
如果用户有hr_user,则执行:
select *
from users
where 1=1
如果用户没有hr_user,请执行:
select *
from users
where userstatus <>'Active'
我的PgAdmin控制台可以正常使用。
但是,当用户尝试从他们的桌面软件访问时,会出现一个奇怪的错误:
错误:角色“虹膜”不存在
如果删除新代码,则错误消失。
我的问题: 为什么创建新组角色会导致PostgreSQL认为用户角色不存在?我该怎么办?