我需要确定当前为数据库中的某些示例化视图授予了哪些特权。
对表或标准视图执行此操作的查询非常简单:
SELECT grantee, string_agg(privilege_type, ', ') AS privileges
FROM information_schema.table_privileges
WHERE table_schema = 'some_schema' AND table_name = 'some_table'
GROUP by grantee;
也就是说,对于物化视图似乎没有类似的表。PostgreSQL在哪里存储这些信息?
2条答案
按热度按时间ujv3wf0j1#
在Postgres中,system catalogs是关于安装和数据库的完整信息的基本集合。系统目录是最可靠的信息来源。Information schema作为辅助功能基于系统目录,并与其他RDBMS兼容:
信息模式是在SQL标准中定义的,因此可以预期是可移植的,并且保持稳定-不像系统目录,它是特定于PostgreSQL的,并且在实现关注点之后建模。然而,信息模式视图不包含关于PostgreSQL特定特性的信息;查询那些你需要查询的系统目录或其他PostgreSQL特定的视图。
物化视图不是SQL标准对象,因此信息模式不包含有关它们的信息。
系统目录
pg_class
在relacl
列中包含有关权限的所有信息。如果列是
null
,则所有者具有所有权限。acl
字符串中的用户名为空字符串表示public
。你需要一个函数以 * 可读 * 格式显示权限:
用途:
rbl8hiat2#
根据klin的有益回答,我提出了一个视图,它列出了
pg_class
中出现的所有关系(表、视图、m)的所有特权的摘要。视图、索引、序列、外部表、复合类型):