Postgres:替换具有依赖关系的视图

时间:2015-05-19 20:21:09

标签: sql postgresql views ddl

我还没有找到一个优雅的解决方案,所以我想知道是否有人偶然发现了类似的东西。

在Postgres中,MyViewA使用了MyViewB使用的MyViewC视图。作为性能改进,我想实现视图A,但是我找不到一种简单的方法来做到这一点,而不会删除和重新定义整个依赖序列。

那就是,理想情况下,我想这样做:

REPLACE MATERIALIZED VIEW MyViewA AS SELECT...

但遗憾的是,Postgres不允许在同一上下文中使用REPLACEMATERIALIZED。我只尝试了DROP VIEW然后CREATE MATERIALIZED VIEW,但这当然会导致Postgres抱怨cannot drop view MyViewA because other objects depend on it

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是创建临时视图,修改MyViewB以使用该视图,重新定义原始视图并将MyViewB修改回原始视图,或者如果没有查询{{} 1}},只需重命名,定义一个新的并更改MyViewA

因此假设原文是(非常简化):

MyViewB

然后您可以像这样修改CREATE VIEW MyViewA AS SELECT col1, col2, col3 FROM table; CREATE VIEW MyViewB AS SELECT col1, col2 FROM MyViewA where col3=1; CREATE VIEW MyViewC AS SELECT col1 FROM MyViewC where col2='test';

MyViewA

这样您就不需要处理任何相关视图。

相关问题