J'ai une vue matérialisée dans Postgres 9.3
que j'aimerais mettre à jour avec de nouvelles colonnes. Cependant, d'autres vues matérialisées dépendent également de cette vue, et le message d'erreur indique que la suppression d'une vue n'est pas possible lorsque d'autres objets en dépendent.
ERREUR: impossible de supprimer la vue matérialisée latest_charges car d'autres objets en dépendent
Il ressort également de la documentation que le mot clé REPLACE n'est pas valide pour une vue matérialisée. Existe-t-il un raccourci en plus de supprimer tous les objets dépendants et de les reconstruire chacun?
Depuis PostgreSQL 9.4: Différent de la documentation de CREATE VIEW , la documentation de CREATE MATERIALIZED VIEW ne mentionne PAS le mot-clé REPLACE. Il ne semble pas y avoir de raccourci en dehors de la suppression de tous les objets dépendants et de la reconstruction de chacun.
Lorsque vous le faites, je ne peux que recommander deux petites choses:
Pour ma situation, je préfère limiter les baisses en utilisant un calque de vue:
par exemple.
create table test (myfield int);
insert into test values (1);
create materialized view mv_test as select myfield from test;
create view v_test as select myfield from mv_test;
select * from v_test;
create materialized view mv_test_new as select myfield, myfield+1 as myfield2 from test;
alter view v_test rename to v_test_old;
alter materialized view mv_test rename to mv_test_old;
create view v_test as select myfield,myfield2 from mv_test_new;
select * from v_test;
alter materialized view mv_test_new rename to mv_test;
drop view v_test_old; -- when ready
drop materialized view mv_test_old; -- when ready
Dans PgAdmin (version 4.x), je pouvais facilement modifier la définition (j'ai ajouté une clause where) dans la boîte de propriétés. Votre problème pourrait être résolu de cette façon.