PostgreSQL
pg+debezium+kafka实时同步
三机patroni+etcd高可用
基于Python实现大批量dataframe格式数据快速存入postgresql
python数据批量插入postgreSQL数据库
pg 插件扩展(extension)开发
psql 连接数据库的方法
pg 函数返回表、数据集、结果集
pg 日志记录 异常处理
pg 作业调度器 pg_timetable
pg 查询对象的权限
正则表达式去除注释
pg 数据库高可用及负载均衡JDBC参数
pg 生成节假日
pg_recvlogical 解析日志
pg 查看锁表
pg upsert写法
pg 查看函数或存储过程的定义
plpgsql 代码块
pg 查看表的膨胀率
pg 获取表大小
pg 非物化视图所有者刷新物化视图
本站点使用 MrDoc 构建
-
+
首页
pg 非物化视图所有者刷新物化视图
# 使用安全定义器函数(Security Definer Function) 这是最强大和灵活的解决方案。可以创建一个特殊的函数,该函数以定义者(通常是高权限用户,如物化视图所有者)的身份来执行代码。 * **操作者:** 物化视图的所有者或超级用户(创建函数的人)。 * **步骤:** 1. **创建一个函数:** 由物化视图的所有者创建一个函数,并使用 `SECURITY DEFINER` 关键字。这意味着函数将以创建者的权限来运行,而不是调用者的权限。 ```sql -- 切换到物化视图所有者身份执行 CREATE OR REPLACE FUNCTION refresh_my_matview() RETURNS void AS $$ REFRESH MATERIALIZED VIEW your_materialized_view_name; -- 此处刷新具体的物化视图 $$ LANGUAGE sql SECURITY DEFINER; ``` 2. **设置函数所有者:** 确保该函数的所有者是物化视图的所有者,这样 `SECURITY DEFINER` 才能生效。 ```sql -- 通常CREATE时就已经设置好,如果需要修改,可以执行 ALTER FUNCTION refresh_my_matview() OWNER TO matview_owner_username; ``` 3. **授权给普通用户:** 允许普通用户执行这个函数。 ```sql -- 授权给指定的普通用户 GRANT EXECUTE ON FUNCTION refresh_my_matview() TO ordinary_user_name; -- 或者,如果想让所有用户都能调用,可以授权给 PUBLIC -- GRANT EXECUTE ON FUNCTION refresh_my_matview() TO PUBLIC; ``` * **结果:** 普通用户 `ordinary_user_name` 只需要执行 `SELECT refresh_my_matview();` 即可刷新物化视图。虽然他是以自己的身份调用函数,但函数体内的 `REFRESH` 命令是以定义者(即物化视图所有者)的身份执行的,因此有权限成功操作。
vleity
2026年3月23日 15:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码