本ページでは、具体化されたビューの作成方法について説明します。

構文

CREATE MATERIALIZED VIEW name
[build clause][create mv refresh] AS subquery

build_clause は次のとおりです。

BUILD {IMMEDIATE | DEFERRED}    

create_mv_refresh は次のとおりです。

REFRESH [COMPLETE] [ON DEMAND]

パラメーター

パラメーター 説明
name 作成するビューの名前。 名前はスキーマで修飾することができます。
subquery ビューの内容を指定する SELECT 文。 有効なクエリの詳細については、SELECT をご参照ください。
build clause build_clause を含めて、ビューにデータが入力されるタイミングを指定します。 BUILD IMMEDIATE または BUILD DEFERRED を指定します。
  • BUILD IMMEDIATE は、ビューにすぐにデータを入力するようサーバーに指示します。 これがデフォルトのオプションです。
  • BUILD DEFERRED は、REFRESH 操作中に後でビューにデータを取り込むようサーバーに指示します。
create mv refresh 具体化されたビューのコンテンツをいつ更新する必要があるかを指定するには、create_mv_refresh 句を含めます。 句には、REFRESH キーワードの後に COMPLETE または ON DEMAND、あるいはその両方が含まれます。
  • ここで COMPLETE は、具体化されたビューが更新されたときにビューの定義クエリを実行して、現在のコンテンツを破棄し、具体化されたビューを再ロードするようサーバーに指示します。
  • ON DEMAND は、DBMS_MVIEW パッケージを呼び出すか、Postgres REFRESH MATERIALIZED VIEW 文を呼び出すことにより、サーバーにオンデマンドで具体化されたビューを更新するように指示します。 これがデフォルトのオプションです。

説明

CREATE MATERIALIZED VIEW は、ビューがクエリで参照されるたびに更新されないクエリのビューを定義します。 デフォルトでは、ビューの作成時にビューにデータが入力されます。 BUILD DEFERRED キーワードを含めて、ビューの作成を遅らせることができます。

具体化されたビューはスキーマで修飾することができます。 CREATE MATERIALIZED VIEW 文の実行時にスキーマ名を指定すると、指定したスキーマにビューが作成されます。 ビュー名は、同じスキーマ内の他のビュー、テーブル、シーケンス、またはインデックスの名前とは異なる必要があります。

  • 具体化されたビューは読み取り専用です。 サーバーでは、ビューに対する INSERT、UPDATE、または DELETE 操作が許可されていません。
  • ビューで参照されるテーブルへのアクセスは、ビュー所有者の権限によって決定されます。 ビューのユーザーは、ビューで使用されるすべての関数を呼び出す権限を持っている必要があります。
  • Postgres REFRESH MATERIALIZED VIEW 文の詳細については、https://www.postgresql.org/docs/11/sql-refreshmaterializedview.html にある PostgreSQL コアのドキュメントをご参照ください。

次の文は、dept_30 という名前の具体化されたビューを作成します。

CREATE MATERIALIZED VIEW dept_30 BUILD IMMEDIATE AS SELECT * FROM emp WHERE deptno = 30;