私はマテリアライズドビューに依存するビューを持っています。 定義が.sqlファイルにあり、カスケードするとマテリアライズド・ビューが削除されます。ビューを作成するとテーブルが作成されます
DROP MATERIALIZED VIEW IF EXISTS mat_view_name CASCADE;
CREATE MATERIALIZED VIEW mat_view_name AS ...;
CREATE VIEW view_name AS
SELECT ... FROM (
SELECT ... FROM mat_view_name
UNION
SELECT ... from another_table
)
;
私は、マテリアライズド・ビュー内のSELECTステートメントを変更し、私は、移行中にSQLスクリプトを実行すると、それは私のstructure.sqlのテーブルに私の最初のビューを変更します。
CREATE VIEW view_name AS...
は、私は2つだけがselectでJOINステートメントを追加:
は、ここで私は、移行をロールバックする場合
CREATE TABLE view_name (
...
);
ALTER TABLE ONLY view_name REPLICA IDENTITY NOTHING;
CREATE RULE "_RETURN" AS
ON SELECT TO view_name DO INSTEAD SELECT .....;
は、私は元のコードを取得し、私は私のstructure.sqlに入る新しいコードですマテリアライズド・ビューの内部にあります。
データベースのバージョンは9.6.2です。
これはなぜ起こっているのですか? パフォーマンス上の問題ですか、PGはクラシック表示の代わりにこれを使用することにしますか? ビューを強制的に作成するにはどうすればいいですか?