假设我有两个Postgresql数据库组,即“作者”和“编辑”,以及两个用户,“ maxwell”和“ ernest”。
create role authors;
create role editors;
create user maxwell;
create user ernest;
grant authors to editors; --editors can do what authors can do
grant editors to maxwell; --maxwell is an editor
grant authors to ernest; --ernest is an author
我想编写一个性能函数,该函数返回maxwell所属角色(最好是其oid)的列表,如下所示:
create or replace function get_all_roles() returns oid[] ...
它应返回maxwell,作者和编辑者的oid(而不是ernest)。
但是我不确定有继承时该怎么做。
pg_has_role()
它可能比我的递归查询快一点,即使这并不重要。但是,最后一件事:它返回了超级管理员的所有角色,这可能是也可能不是受欢迎的副作用。那就是结果与我的查询不同的地方。