Diciamo che ho due gruppi di database Postgresql, "autori" e "editori", e due utenti, "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
Vorrei scrivere una funzione performante che restituisce un elenco dei ruoli (preferibilmente della loro oid) a cui appartiene maxwell, qualcosa del genere:
create or replace function get_all_roles() returns oid[] ...
Dovrebbe restituire gli oid per maxwell, autori ed editori (ma non ernest).
Ma non sono sicuro di come farlo in caso di eredità.
pg_has_role()
probabilmente è un po 'più veloce della mia query ricorsiva, anche se non ha importanza. Un'ultima cosa però: restituisce tutti i ruoli per i super utenti, che possono essere o meno un effetto collaterale positivo. Ecco dove il risultato differisce dalla mia domanda.