我正在Linux上通过运行脚本执行sql文件。
我可以看到我的查询执行得很好,但我有以下查询来刷新我的 testData.sql 文件中的视图,这给了我错误
refresh MATERIALIZED VIEW view_test
错误
psql:/home/test/sql/testData.sql:111: ERROR: must be owner of relation view_test
我已申请以下权限
grant select,update,delete,insert on view_test to "user123";
如何向POSTGRESQL中的视图授予刷新权限?
您应该创建一个新角色来拥有该视图,然后将该角色授予任何需要刷新视图权限的用户。这可确保您在需要创建其他用户凭据时可以轻松分配权限。
CREATE ROLE refresh_materialized_views;
GRANT SELECT, INSERT, UPDATE, DELETE ON view_test TO refresh_materialized_views;
GRANT refresh_materialized_views TO user123;
GRANT refresh_materialized_views TO current_owner_of_view_test;
ALTER TABLE view_test OWNER TO refresh_materialized_views;
一个诱人的答案是将视图的所有者更改为 user123,但这很危险 - 您会破坏当前所有者对其视图的访问权限。
我将创建一个新角色并将其设置为物化视图的新所有者。然后将该角色添加到您希望能够刷新的任何用户。这样,经过身份验证的数据库用户不是所有者,您可以轻松添加/删除具有权限的用户。
错误
PostgreSQL
要求我们必须是所有者才能刷新view_test
。您可以使用 alter table view_test owner to 'user123'
命令将此物化视图的所有者更改为 user123
Postgres 17 引入了 MAINTAIN 权限,允许您刷新物化视图。
GRANT MAINTAIN ON materiview FOR user;