如何用依赖视图更改物化视图



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

使用PGAdmin,我想更改MaterializedView#1的代码(只需更改where子句,视图的结构保持不变(,但MaterializedView#2是从MaterializedView#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;

最新更新