Det finns ingen sådan vy direkt, men den data som behövs för att skapa den finns i systemkatalogerna:
http://www.postgresql.org/docs/current/static/catalogs.html
Det finns till exempel en relacl
fältet i pg_class
:
select oid::regclass, relacl from pg_class;
Det finns liknande fält i andra kataloger, nämligen typacl
i pg_type
och proacl
i pg_proc
.
Du kommer förmodligen att vilja använda ytterligare två kataloger, nämligen pg_authid
för att veta vilka roller som är har superanvändarbehörigheter och pg_auth_members
att veta vem som har vilken roll.
(pg_default_acl
används bara när objekt skapas, så det är inte användbart.)
Det finns ett par aclitem-relaterade interna funktioner som kan vara användbara för att skapa vyn. Du kan lista dem i psql
som så:
\df+ *acl*
I synnerhet aclexplode()
. Följande exempel räcker förhoppningsvis för att du ska komma igång:
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;
Den kan optimeras genom att först utöka acl-raderna, t.ex.:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Det leder dig direkt till önskat resultat.
Såvitt jag är medveten om är det ungefär lika bra som det blir med de inbyggda verktygen. (Naturligtvis kan du skriva din egen uppsättning operatorer i C om du vill försöka optimera detta ytterligare.)
När det gäller dina extra frågor, är jag rädd att de bara kan besvaras av en handfull människor i världen, aka kärnutvecklarna själva. De hänger på pg-hackarlistan oftare än de gör här.