Es gibt keine solche Ansicht, aber die Daten, die zu ihrer Erstellung benötigt werden, befinden sich in den Systemkatalogen:
http://www.postgresql.org/docs/current/static/catalogs.html
Zum Beispiel gibt es einen relacl
Feld in pg_class
:
select oid::regclass, relacl from pg_class;
Es gibt ähnliche Felder in anderen Katalogen, nämlich typacl
in pg_type
und proacl
in pg_proc
.
Vermutlich möchten Sie zwei weitere Kataloge verwenden, nämlich pg_authid
um zu wissen, welche Rollen Superuser-Privilegien haben, und pg_auth_members
um zu wissen, wer welche Rolle hat.
(Die pg_default_acl
wird nur während der Objekterstellung verwendet, ist also nicht sinnvoll.)
Es gibt ein paar interne Funktionen im Zusammenhang mit Aclitem, die sich beim Erstellen der Ansicht als nützlich erweisen können. Sie können sie in psql
auflisten so:
\df+ *acl*
Insbesondere aclexplode()
. Das folgende Beispiel reicht hoffentlich aus, um Ihnen den Einstieg zu erleichtern:
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;
Es kann optimiert werden, indem zuerst die acl-Zeilen erweitert werden, z. B.:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Sie führt Sie direkt zum gewünschten Ergebnis.
Soweit mir bekannt ist, ist das mit den integrierten Tools so gut wie möglich. (Natürlich könnten Sie Ihren eigenen Satz von Operatoren in C schreiben, wenn Sie versuchen möchten, dies weiter zu optimieren.)
In Bezug auf Ihre zusätzlichen Fragen, fürchte ich, dass sie nur von einer Handvoll Menschen auf der Welt beantwortet werden können, auch bekannt als die Core-Entwickler selbst. Sie hängen öfter auf der Pg-Hackerliste rum als hier.