PostgreSQL,显示角色成员

Joc*_*rze 9 postgresql role pgadmin

有没有办法可视化哪些用户是 PostgreSQL / pgAdminIII 中某个角色的成员,例如

role: council_stuff
members:
    Harry
    Ben
    Steve
    Melinda
Run Code Online (Sandbox Code Playgroud)

Dan*_*ité 18

获取所有角色的所有成员:

SELECT r.rolname as username,r1.rolname as "role"
FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_auth_members m
ON (m.member = r.oid)
JOIN pg_roles r1 ON (m.roleid=r1.oid)                                  
WHERE r.rolcanlogin
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)

添加r1.rolname='council_stuff'以仅过滤那个。

请注意,用户本身是 postgresql 用语中的“角色”(旧版本中曾经有“用户和组”,但现在已统一为角色)。

这里区分了用户和具有rolcanlogin布尔列的角色,这对应于用户是具有 LOGIN 权限的角色的解释。

这两个JOIN可以变成LEFT JOIN添加不属于任何角色的用户:

SELECT r.rolname as username,r1.rolname as "role"
FROM pg_catalog.pg_roles r LEFT JOIN pg_catalog.pg_auth_members m
ON (m.member = r.oid)
LEFT JOIN pg_roles r1 ON (m.roleid=r1.oid)                                  
WHERE r.rolcanlogin
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)