aclexplode()
是一个系统函数,它将提供的 aclitem
数组作为行集返回。
aclexplode()
在 PostgreSQL 9.0 中添加。
用法
aclexplode (aclitem
[] )
→ setof record (grantor
oid
,grantee
oid
,privilege_type
text
,is_grantable
boolean
)
每个授予的权限都作为单独的一行返回。
如果 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 函数
另请参阅
makeaclitem(),acldefault()