select
a.datname,
b.rolname,
string_agg(a.pri_t, ',')
from
(
select
datname,
(
aclexplode(
coalesce(datacl, acldefault('d'::"char", datdba))
)
).grantee as grantee,
(
aclexplode(
coalesce(datacl, acldefault('d'::"char", datdba))
)
).privilege_type as pri_t
from
sys_database
where
datname not like 'template%'
) a,
sys_roles b
where
(
a.grantee = b.oid
or a.grantee = 0
)
and b.rolname = '用户名'
group by
a.datname,
b.rolname;