Няма такъв изглед извън кутията, но данните, необходими за създаването му, са в системните каталози:
http://www.postgresql.org/docs/current/static/catalogs.html
Например, има relacl
поле в pg_class
:
select oid::regclass, relacl from pg_class;
Подобни полета има и в други каталози, а именно typacl
в pg_type
и proacl
в pg_proc
.
Вероятно ще искате да използвате още два каталога, а именно pg_authid
за да знаете кои роли имат привилегии на суперпотребител и pg_auth_members
да знам кой каква роля има.
(pg_default_acl
се използва само по време на създаване на обект, така че не е полезен.)
Има няколко вътрешни функции, свързани с aclitem, които могат да бъдат полезни при създаването на изгледа. Можете да ги изброите в psql
така:
\df+ *acl*
По-специално aclexplode()
. Надяваме се, че следният пример ще бъде достатъчен, за да започнете:
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;
Може да се оптимизира, като първо се разширят редовете на acl, напр.:
select oid::regclass,
aclitem.grantee
from (select oid, aclexplode(relacl) as aclitem from pg_class) sub
Това ще ви отведе направо до желания резултат.
Доколкото ми е известно, това е толкова добре, колкото ще се получи с помощта на вградените инструменти. (Естествено, можете да напишете свой собствен набор от оператори в C, ако искате да опитате да оптимизирате това допълнително.)
По отношение на вашите допълнителни въпроси, страхувам се, че могат да отговорят само от шепа хора по света, известни още като самите основни разработчици. Те се мотаят в списъка с хакери на pg по-често, отколкото тук.