Digamos que eu tenha dois grupos de banco de dados do Postgresql, "autores" e "editores", e dois usuários, "maxwell" e "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
Eu gostaria de escrever uma função de desempenho que retorne uma lista dos papéis (de preferência de seus oids) aos quais o maxwell pertence, algo como isto:
create or replace function get_all_roles() returns oid[] ...
Ele deve retornar os oids para maxwell, autores e editores (mas não para ernest).
Mas não sei como fazê-lo quando houver herança.
pg_has_role()
provavelmente é um pouco mais rápido que minha consulta recursiva, mesmo que isso dificilmente importe. Uma última coisa, porém: ele retorna todas as funções para os superusuários, o que pode ou não ser um efeito colateral bem-vindo. É aí que o resultado difere da minha consulta.