【问题标题】:How to alter materialized view with dependent views如何使用依赖视图更改物化视图
【发布时间】:2020-11-14 09:15:37
【问题描述】:

我目前有一系列物化视图 View #1 和 View #2 用于报告。

使用 PGAdmin,我想更改 Materialized View #1 的代码(只需更改 where 子句,视图的结构保持不变),但 Materialized View #2 是从 Materialized View #1 生成的。

有没有办法推迟任何检查,这样我就可以在不放弃所有后续视图的情况下进行更改?

【问题讨论】:

  • 很遗憾没有。这是 Postgres 中比较烦人的限制之一

标签: postgresql sql-view materialized-views


【解决方案1】:

是的……

有一种解决方案可能并不适用于所有情况。重新运行所有依赖对象的创建脚本可能会更简单。

因此,虽然物化视图的查询不能在不首先删除物化视图的情况下更改,但没有什么能阻止您将所述查询存储在常规视图中,并创建一个调用该常规视图的物化视图。然后,您可以随意替换(更新)常规视图,然后您只需刷新实体化视图。

create table test_table(id int, txt text);
insert into test_table values (1,'one'),(2,'two');

create or replace view test_view
AS 
 select id as v_id, 
        txt as v_txt
 from test_table;
 
 
create materialized view test_mat_view
AS
 select v_id, v_txt from test_view;
 
select * from test_mat_view; 
 
  v_id | v_txt
------+-------
    1 | one
    2 | two
(2 rows)
 
create or replace view test_view
AS 
 select id as v_id, 
        'constant' as v_txt
 from test_table;
 
REFRESH materialized view test_mat_view;
  
select * from test_mat_view; 
 
 v_id |  v_txt
------+----------
    1 | constant
    2 | constant
 
drop table test_table cascade;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 2018-01-08
    • 2019-10-07
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多