定義新的具體化視圖。

語法

CREATE MATERIALIZED VIEW name     [build_clause][create_mv_refresh] AS subquery

其中build_clause為:

BUILD {IMMEDIATE | DEFERRED}

其中create_mv_refresh為:

REFRESH [COMPLETE] [ON DEMAND]

說明

CREATE MATERIALIZED VIEW 定義查詢的視圖,每次在查詢中引用視圖時不更新該視圖。默認情況下,視圖在創(chuàng)建時填充;您可以包括 BUILD DEFERRED 關鍵字以將視圖的填充延后。

具體化視圖可以是 schema 限定的;如果您在調(diào)用 CREATE MATERIALIZED VIEW 命令時指定 schema 名稱,則將在指定的 schema 中創(chuàng)建視圖。視圖名稱不得與同一 schema 中其他所有視圖、表、序列或索引的名稱相同。

說明 具體化視圖是只讀的,服務器不允許在視圖上執(zhí)行 INSERT、UPDATE 或 DELETE。

對視圖中所引用表的訪問權(quán)限由視圖所有者的權(quán)限決定;視圖的用戶必須有權(quán)調(diào)用視圖所使用的全部函數(shù)。

有關 Postgres REFRESH MATERIALIZED VIEW 命令的更多信息,請參見 PostgreSQL 核心文檔

參數(shù)

參數(shù) 說明
name 要創(chuàng)建的視圖的名稱(可能是 schema 限定的)。
subquery 一個指定視圖內(nèi)容的 SELECT 語句。有關有效查詢的更多信息,請參見 SELECT。
build_clause 包括 build_clause 以指定應何時填充視圖。指定 BUILD IMMEDIATE 或 BUILD DEFERRED:
  • BUILD IMMEDIATE 指示服務器立即填充視圖。這是默認行為。
  • BUILD DEFERRED 指示服務器稍后填充視圖(在 REFRESH 操作期間)。
create_mv_refresh 包括 create_mv_refresh 子句以指定應何時更新具體化視圖的內(nèi)容。子句包含 REFRESH 關鍵字,后跟 COMPLETE 和/或 ON DEMAND,其中:
  • COMPLETE 指示服務器放棄當前內(nèi)容,并在刷新具體化視圖時,通過執(zhí)行視圖的定義查詢來重新加載具體化視圖。
  • ON DEMAND 指示服務器通過調(diào)用 DBMS_MVIEW 包或調(diào)用 Postgres REFRESH MATERIALIZED VIEW 語句來按需刷新具體化視圖。這是默認行為。

示例

以下語句創(chuàng)建名為 dept_30 的具體化視圖:

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

該視圖包含從 emp 表中檢索的、在 30 部門中工作的所有員工的相關信息。