我目前有一系列的物化视图View #1和View #2,我用它们来进行报告。
使用PGAdmin,我想更改物化视图#1的代码(只需更改where子句,视图的结构保持不变),但物化视图#2是从物化视图#1生成的。
有没有办法推迟任何检查,这样我就可以在不丢弃每个后续视图的情况下进行更改?
发布于 2020-07-24 22:22:45
是的..。
有一种解决方案可能并不适用于所有情况。重新运行所有依赖对象的创建脚本可能会更简单。
因此,虽然实体化视图的查询不能在不先删除实体化视图的情况下更改,但您可以将所述查询存储在常规视图中,并创建调用此常规视图的实体化视图。然后,您可以随意替换(更新)常规视图,然后只需刷新实体化视图。
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;https://stackoverflow.com/questions/63074692
复制相似问题