Actualmente tengo una serie de vistas materializadas Vista n.° 1 y Vista n.° 2 que utilizo para generar informes.
Usando PGAdmin, quiero cambiar el código de la Vista Materializada #1 (simplemente cambie la cláusula where, la estructura de la vista sigue siendo la misma), pero la Vista Materializada #2 se genera a partir de la Vista Materializada #1.
¿Hay alguna manera de aplazar alguna de las comprobaciones para poder hacer un cambio sin descartar todas las vistas posteriores?
Sí...
Hay una solución que puede no ser adecuada en todos los casos. Podría ser más sencillo volver a ejecutar el script de creación de todos los objetos dependientes.
Por lo tanto, aunque la consulta de la vista materializada no puede cambiar sin descartar primero la vista materializada, nada le impide almacenar dicha consulta en una vista normal y crear una vista materializada que llame a esta vista normal. Luego, puede reemplazar (actualizar) la vista normal y luego solo tiene que actualizar la vista materializada.
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;