aclexplode() 是一个系统函数,它将提供的 aclitem 数组作为行集返回。
aclexplode() 在 PostgreSQL 9.0 中添加。
用法
aclexplode (aclitem[] )
→ setof record (grantoroid,granteeoid,privilege_typetext,is_grantableboolean)
每个授予的权限将作为单独的行返回。
如果 grantee 是伪角色 PUBLIC,则在 grantee 列中表示为 0。
变更历史
- PostgreSQL 9.0
- 添加 (提交 36f887c4)
示例
aclexplode() 的基本用法示例
postgres=# CREATE TABLE bar (id INT); CREATE TABLE postgres=# GRANT SELECT ON bar TO foo; GRANT postgres=# SELECT (aclexplode(relacl)).* FROM pg_class WHERE relname='bar'; grantor | grantee | privilege_type | is_grantable ---------+---------+----------------+-------------- 10 | 10 | INSERT | f 10 | 10 | SELECT | f 10 | 10 | UPDATE | f 10 | 10 | DELETE | f 10 | 10 | TRUNCATE | f 10 | 10 | REFERENCES | f 10 | 10 | TRIGGER | f 10 | 10 | MAINTAIN | f 10 | 16384 | SELECT | f (9 rows)
确定哪些数据库已授予 PUBLIC 角色
postgres=# SELECT datname
FROM pg_database
WHERE 0::oid = ANY(SELECT (aclexplode(datacl)).grantee);
datname
-----------
template1
template0
(2 rows)
参考资料
- PostgreSQL 文档: aclitem 函数
