Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       CREATE VIEW - 定義一個視圖

SYNOPSIS

       CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query

DESCRIPTION 描述

       CREATE  VIEW 定義一個查詢的視圖。 這個視圖不是物理上實際存在(於磁碟)的。具體的說,自動生
       成一個改寫索引規則(一個 ON SELECT 規則)的查詢用以支持在視圖上的檢索。

       CREATE OR REPLACE VIEW 類似,不過是如果一個同名的視圖已經存在,那麼就替換它。 你只能用一個
       生成相同字段的新查詢替換一個視圖(也就是說,同樣字段名和數據類型)。

        如果給出了一個模式名(比如,CREATE VIEW myschema.myview ...),那麼該視圖是在指定的模式中
       創建的。 否則它是在當前模式中創建的。 該視圖名字必需和同一模式中任何其它視圖,表,序列或者
       索引的名字不同。

PARAMETERS 參數

       name
               所要創建的視圖名稱(可以有模式修飾)。

       column_name
               一個可選的名字列表,用於當作視圖的字段名。如果沒有給出, 字段名取自查詢。

       query
               一個將為視圖提供行和列的查詢(也就是一條 SELECT 語句)。

               請參閱 SELECT [select(7)] 獲取有效查詢的更多信息。

NOTES 注意

        目前,視圖是只讀的:系統將不允許在視圖上插入,更新,或者刪除數據。 你可以通過在視圖上創建
       把插入等動作重寫為向其它表做合適操作的規則來實現可更新視圖的效果。   更多信息詳見   CREATE
       RULE [create_rule(7)].

        使用 DROP VIEW 語句刪除視圖

        請注意視圖字段的名字和類型不一定是你們期望的那樣。比如,

       CREATE VIEW vista AS SELECT 'Hello World';

        在兩個方面很糟糕:字段名預設是  ?column?,並且字段的數據類型預設是 unknown。 如果你想視圖
       的結果是一個字串文本,那麼用類似下面這樣的東西

       CREATE VIEW vista AS SELECT text 'Hello World' AS hello;

        對視圖引用的表的訪問的權限由視圖的所有者決定。 不過,在視圖裏調用的函數當作他們直接從使用
       視圖的查詢裏調用看待。 因此,視圖的使用者必須有使用視圖調用的所有函數的權限。

EXAMPLES 例子

        創建一個由所有喜劇電影組成的視圖:

       CREATE VIEW comedies AS
           SELECT *
           FROM films
           WHERE kind = 'Comedy';

COMPATIBILITY 相容性

        SQL 標準為 CREATE VIEW 聲明了一些附加的功能:

       CREATE VIEW name [ ( column [, ...] ) ]
           AS query
           [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]

        完整的SQL命令可選的子句是:

       CHECK OPTION
               這個選項用於可更新視圖。 所有對視圖的INSERT和UPDATE都要經過視圖定義條件的校驗。 (
              也就是說,新數據應該可以通過視圖看到。)如果沒有通過校驗,更新將被拒絕。

       LOCAL
               對這個視圖進行完整性檢查。

       CASCADE
               對此視圖和任何相關視圖進行完整性檢查。  在既沒有聲明  CASCADE   也沒有聲明   LOCAL
              時,假設為 CASCADE。

       CREATE OR REPLACE VIEW 是 PostgreSQL 的擴展。

譯者

       Postgresql 中文網站 何偉平 <laser@pgsqldb.org>