Il n'y a pas une telle vue prête à l'emploi, mais les données nécessaires pour la créer se trouvent dans les catalogues système :
http://www.postgresql.org/docs/current/static/catalogs.html
Par exemple, il y a un relacl
champ dans pg_class
:
select oid::regclass, relacl from pg_class;
Il existe des champs similaires dans d'autres catalogues, à savoir typacl
dans pg_type
et proacl
dans pg_proc
.
Vous voudrez probablement utiliser deux autres catalogues, à savoir pg_authid
pour savoir quels rôles ont des privilèges de superutilisateur, et pg_auth_members
pour savoir qui a quel rôle.
(Le pg_default_acl
n'est utilisé que lors de la création d'un objet, il n'est donc pas utile.)
Il existe quelques fonctions internes liées à aclitem qui peuvent être utiles pour créer la vue. Vous pouvez les lister en psql
comme ça :
\df+ *acl*
En particulier aclexplode()
. L'exemple suivant suffira, espérons-le, pour vous aider à démarrer :
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;
Il peut être optimisé en développant d'abord les lignes acl, par exemple :
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Cela vous mènera directement au résultat souhaité.
Autant que je sache, c'est à peu près aussi bon qu'il obtiendra en utilisant les outils intégrés. (Naturellement, vous pouvez écrire votre propre ensemble d'opérateurs en C si vous souhaitez essayer d'optimiser cela davantage.)
En ce qui concerne vos questions supplémentaires, je crains qu'elles ne puissent être répondues que par une poignée de personnes dans le monde, c'est-à-dire les développeurs de base eux-mêmes. Ils traînent plus souvent sur la liste des hackers pg qu'ici.