我目前有一系列用于报告的物化视图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;