2017-03-28 15 views
0

私はマテリアライズドビューに依存するビューを持っています。 定義が.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はクラシック表示の代わりにこれを使用することにしますか? ビューを強制的に作成するにはどうすればいいですか?

答えて

0

このスクリプトは、データベースのダンプまたはバックアップから取得しているものとします。

マテリアライズド・ビューは、基本的にCREATE TABLE ASと同様の方法で作成された表であり、sqlはデータベースに格納されているため、リフレッシュできます。

materialized viewをダンプするときのデフォルトの動作は、テーブルとしてダンプすることです。

CREATE MATERIALIZED VIEW: documentation

関連する問題