如何在postgresql中使视图不可更新

问题描述 投票:0回答:4

我正在使用 PostgreSQL 来存储大量业务数据以用于数据仓库目的。我正在编写视图来自定义物化表。

我想知道是否可以设置一个不可更新的视图。

我查了postgresql手册,但没有找到具体的答案。

提前非常感谢。

postgresql view
4个回答
1
投票

接受的答案已经过时 - PostgreSQL 目前支持可更新视图,因此问题实际上是相关的:

https://www.postgresql.org/docs/14/rules-views.html#RULES-VIEWS-UPDATE

为了使视图不可更新,只需避免向视图的任何角色授予 INSERT/UPDATE/DELETE 权限(或撤销此类权限(如果已授予)。

答案归功于 RhodiumToad (https://twitter.com/rhodiumtoad, https://github.com/RhodiumToad)


0
投票

PostgreSQL 没有可更新的视图,您必须创建 RULE 才能使之成为可能。如果没有这些额外的规则,您就无法对视图进行更新。

摘自手册

如果视图被命名为 INSERT、UPDATE 的目标关系, 或删除?完成后 如上所述的替换,我们将 有一个查询树,其中的结果 子查询中的关系点 范围表条目。这行不通, 所以重写器会抛出一个错误,如果 看到它产生了这样的东西。


0
投票

PostreSQL 中的视图不可更新。


0
投票

作为其他答案的替代方案,您可以将

OFFSET 0
添加到您的查询中,即:

CREATE VIEW my_view AS (SELECT * FROM my_table OFFSET 0);

现在插入my_view会产生错误:

包含 LIMIT 或 OFFSET 的视图不能自动更新。

© www.soinside.com 2019 - 2024. All rights reserved.