如何在 POSTGRESQL 中向用户授予物化视图的刷新权限?

Sag*_*gar 9 postgresql refresh view

我正在通过运行脚本在 linux 上执行 sql 文件。

我可以看到我的查询执行得很好,但我有以下查询来刷新我的 testData.sql 文件中的视图,这给了我错误

refresh MATERIALIZED VIEW view_test
Run Code Online (Sandbox Code Playgroud)

错误

psql:/home/test/sql/testData.sql:111: ERROR:  must be owner of relation view_test
Run Code Online (Sandbox Code Playgroud)

我已申请以下权限

grant select,update,delete,insert on view_test to "user123";
Run Code Online (Sandbox Code Playgroud)

如何向POSTGRESQL 中的视图授予刷新权限?

Bra*_*och 8

您应该创建一个新角色来拥有该视图,然后将该角色授予需要刷新视图权限的任何用户。这可确保您在需要创建其他用户凭据时可以轻松分配权限。

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;
Run Code Online (Sandbox Code Playgroud)

一个诱人的答案是将视图的所有者更改为 user123,但这很危险 - 您会破坏当前所有者对其视图的访问权限。


Ram*_*cov 1

错误PostgreSQL要求我们必须是所有者才能刷新view_test。您可以使用alter table view_test owner to 'user123'命令将此物化视图的所有者更改为user123