Bor*_*rsn 5 postgresql view materialized-views
我收到以下错误:
ERROR: must be owner of materialized view mv_sessions
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)
当尝试刷新我的物化视图时:
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
Run Code Online (Sandbox Code Playgroud)
的所有者mv_sessions是我的自定义master用户。partner我已将所有权限分配给我尝试刷新视图的子用户。
我不想成为partner的所有者mv_sessions。还有其他子用户需要能够刷新视图。
我尝试使用触发功能:
BEGIN
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
RETURN NULL;
END
Run Code Online (Sandbox Code Playgroud)
得到同样的错误:
psycopg2.errors.InsufficientPrivilege: must be owner of materialized view mv_sessions
CONTEXT: SQL statement "REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions"
PL/pgSQL function partners.refresh_mv_sessions() line 3 at SQL statement
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
导致问题的函数:
CREATE OR REPLACE FUNCTION partners.refresh_mv_sessions()
RETURNS TRIGGER LANGUAGE plpgsql
AS $$
BEGIN
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
RETURN NULL;
END $$;
Run Code Online (Sandbox Code Playgroud)
SECURITY DEFINER根据此答案(如 Marth 建议)进行修复,以便非所有者可以刷新物化视图:
CREATE OR REPLACE FUNCTION partners.refresh_mv_sessions()
RETURNS TRIGGER
SECURITY DEFINER
AS $$
BEGIN
REFRESH MATERIALIZED VIEW CONCURRENTLY partners.mv_sessions;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7627 次 |
| 最近记录: |