新しい列で更新するマテリアライズドビューをPostgres 9.3
に持っています。ただし、他のマテリアライズドビューもこのビューに依存しており、エラーメッセージは、他のオブジェクトがビューに依存している場合はビューを削除できないことを示しています。
エラー:他のオブジェクトがマテリアライズドビューに依存しているため、マテリアライズドビューlatest_chargesを削除できません
また、REPLACEキーワードはマテリアライズドビューに対して有効ではないようです。すべての依存オブジェクトを削除してそれぞれを再構築する以外に、ショートカットはありますか?
PostgreSQL 9.4現在: CREATE VIEWのドキュメント とは異なり、 CREATE MATERIALIZED VIEW のドキュメントではREPLACEキーワードについて言及していません。すべての依存オブジェクトを削除して、それぞれを再構築する以外にショートカットはないようです。
あなたがそうするとき、私は2つの小さなことしか推薦できません:
私の状況では、ビューレイヤーを使用してドロップを制限することを好みます。
例えば。
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
PgAdmin(バージョン4.x)では、プロパティボックスの定義(where句を追加)を簡単に変更できました。あなたの問題はその方法で解決できます。