Digamos que tengo dos grupos de bases de datos Postgresql, "autores" y "editores", y dos usuarios, "maxwell" y "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
Me gustaría escribir una función performante que devuelva una lista de los roles (preferiblemente sus oid) a los que pertenece maxwell, algo como esto:
create or replace function get_all_roles() returns oid[] ...
Debería devolver los oids para maxwell, autores y editores (pero no ernest).
Pero no estoy seguro de cómo hacerlo cuando hay herencia.
pg_has_role()
es probablemente un poco más rápido que mi consulta recursiva, incluso si eso apenas importa. Sin embargo, una última cosa: devuelve todos los roles para los superusuarios, lo que puede o no ser un efecto secundario bienvenido. Ahí es donde el resultado difiere de mi consulta.