Der er ikke en sådan visning ud af boksen, men de nødvendige data for at oprette den er i systemkatalogerne:
http://www.postgresql.org/docs/current/static/catalogs.html
For eksempel er der en relacl
felt i pg_class
:
select oid::regclass, relacl from pg_class;
Der er lignende felter i andre kataloger, nemlig typacl
i pg_type
og proacl
i pg_proc
.
Du vil formentlig bruge to kataloger mere, nemlig pg_authid
at vide, hvilke roller der er, har superbrugerrettigheder og pg_auth_members
at vide, hvem der har hvilken rolle.
(pg_default_acl
bruges kun under oprettelse af objekter, så det er ikke nyttigt.)
Der er et par aclitem-relaterede interne funktioner, der kan være nyttige til at skabe udsigten. Du kan liste dem i psql
sådan:
\df+ *acl*
Især aclexplode()
. Følgende eksempel vil forhåbentlig være nok til at komme i gang:
select oid::regclass,
(aclexplode(relacl)).grantor,
(aclexplode(relacl)).grantee,
(aclexplode(relacl)).privilege_type,
(aclexplode(relacl)).is_grantable
from pg_class
where relacl is not null;
Det kan optimeres ved at udvide acl-rækkerne først, f.eks.:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Det vil føre dig direkte til det ønskede resultat.
Så vidt jeg ved, er det omtrent lige så godt, som det bliver ved at bruge de indbyggede værktøjer. (Du kan naturligvis skrive dit eget sæt af operatorer i C, hvis du vil prøve at optimere dette yderligere.)
Med hensyn til dine ekstra spørgsmål er jeg bange for, at de kun kan besvares af en håndfuld mennesker i verden, også kendt som kerneudviklerne selv. De hænger ud på pg-hackerlisten oftere, end de gør her.