首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换Postgres中的物化视图

替换Postgres中的物化视图
EN

Database Administration用户
提问于 2014-01-07 19:35:45
回答 2查看 41.1K关注 0票数 42

我在Postgres 9.3中有一个物化视图,我想用新列进行更新。但是,其他物化视图也依赖于此视图,错误消息指出,当其他对象依赖视图时,不可能删除视图。

错误:不能删除物化视图latest_charges,因为其他对象依赖它

从文档中还可以看出,替换关键字对于物化视图无效。除了删除所有依赖对象和重建每个对象之外,还有其他捷径吗?

EN

回答 2

Database Administration用户

发布于 2017-12-15 10:35:29

对于我的情况,我更喜欢使用视图层来限制下降:

  1. 创建以"_new“为后缀的物化视图的副本,并使用"WITH NO DATA”来实现性能,确保任何索引都是用后缀和通过DROP...CASCADE发现的任何其他依赖对象创建的。
  2. 在新的物化视图上创建一个视图,以提供抽象层,因此我只需要在一个地方更改它。
  3. 更改现有的依赖项,以引用新视图(如果需要,提前刷新数据)
  4. 删除原物化视图和索引,这些视图和索引现在不应该有任何受抚养人。
  5. 更改物化视图和索引,以删除后缀以恢复原始名称。

例如:

代码语言:javascript
复制
create table test (myfield int);
insert into test values (1);
create materialized view mv_test as select myfield from test;
create view v_test as select myfield from mv_test;
select * from v_test;
create materialized view mv_test_new as select myfield, myfield+1 as myfield2 from test;
alter view v_test rename to v_test_old;
alter materialized view mv_test rename to mv_test_old;
create view v_test as select myfield,myfield2 from mv_test_new;
select * from v_test;
alter materialized view mv_test_new rename to mv_test;
drop view v_test_old; -- when ready
drop materialized view mv_test_old; -- when ready
票数 10
EN

Database Administration用户

发布于 2019-07-25 10:19:01

在PgAdmin (Version4.x)中,我可以轻松地修改属性框中的定义(我添加了where子句)。你的问题可以这样解决。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/56304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档