他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

CREATE VIEW

名前

CREATE VIEW -- 新しいビューを定義する

概要

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

説明

CREATE VIEWは問い合わせによるビューを定義します。 ビューは物理的な実体として存在するものではありません。 その代わり、問い合わせでビューが参照される度に、指定された問い合わせが実行されます。

CREATE OR REPLACE VIEWも同様の働きをしますが、 このコマンドでは、同じ名前のビューが既に存在している場合、そのビューを置き換えます。 新しい問い合わせは、既存のビュー問い合わせが生成する列と同じ列(つまり、同じ順序の同じデータ型の同じ列名)を生成しなければなりません。 しかし、そのリストの最後に列を追加しても構いません。 出力列を生成する計算をまったく異なるものにしても構いません。

スキーマ名が付けられている場合(例えば、CREATE VIEW myschema.myview ...)、ビューは指定されたスキーマで作成されます。 スキーマ名がなければ、そのビューは現在のスキーマで作成されます。 一時ビューは特別なスキーマで作成されます。 そのため、一時ビューを作成する時にはスキーマ名を付けることはできません。 ビュー名は、同じスキーマ内の他のビュー、テーブル、シーケンス、インデックス、外部テーブルとは異なる名前である必要があります。

パラメータ

TEMPORARY or TEMP

これが指定された場合、ビューは一時ビューとして作成されます。 現在のセッションが終わった時、一時ビューは自動的に削除されます。 一時ビューが存在する間、現在のセッションでは、これと同じ名前の永続リレーションはスキーマで修飾した名前で参照していない限り不可視です。

ビューで参照されるテーブルの一部が一時テーブルであった場合、(TEMPORARYの指定があってもなくても)ビューは一時ビューとして作成されます。

name

作成するビューの名前です(スキーマ修飾名も可)。

column_name

ビューの列名として使用する名前のリストです。このパラメータは省略可能です。省略された場合、問い合わせに由来する名前が使用されます。

query

ビューの列と行を生成するSELECTまたはVALUESコマンドです。

注釈

現在のところ、ビューは読み取り専用です。 システムは、ビューに対する挿入、更新、削除を許可しません。 しかし、ビューに対する挿入などを他のテーブルに対する処理に書き換えるルールを作成することで、更新可能なビューと同じように扱うことができます。 詳細については、CREATE RULEを参照してください。

ビューを削除するには、DROP VIEW文を使用してください。

ビューの列の名前と型は指定通りに割り当てられることに注意してください。 例えば、次のコマンドを見てください。

CREATE VIEW vista AS SELECT 'Hello World';

この例は、次の2点から好ましくありません。 まず、列の名前がデフォルトの?column?になります。さらに、列のデータ型もデフォルトのunknownになってしまいます。 ビューの結果として文字リテラルを返したい場合は、次のように指定してください。

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

ビューが参照するテーブルにアクセスできるかどうかは、ビューの所有者の権限で決定されます。 これは、場合によっては、背後のテーブルへのアクセスが制限されますが、安全性を提供するために使用することができます。 しかしすべてのビューが不正な改変に対して安全ではありません。 項37.4を参照してください。 ビュー内で実行される関数については、ビューを使用した問い合わせにおいて、その関数が直接呼び出された場合と同様に扱われます。 したがって、ビューを使用するユーザには、ビュー内で使用される全ての関数を呼び出す権限が必要です。

CREATE OR REPLACE VIEWが既存のビューに対して使用されると、ビューを定義するSELECTルールのみが変更されます。 所有者情報、権限、SELECT以外のルールなど他のビューの属性はそのまま変更されません。 置き換えるためにはビューの所有者(所有ロールのメンバである場合も含む)でなければなりません。

全てのコメディ映画(Comedy films)からなるビューを作成します。

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

これはビューを作成した時点でfilmテーブル内にある列を持つビューを作成します。 ビューを作成するために*が使用されていますが、その後にテーブルに追加された列はビューには含まれません。

互換性

標準SQLのCREATE VIEW文には、さらにいくつかの機能が規定されています。

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

このSQLコマンドの全てのオプション句について、次に説明します。

CHECK OPTION

更新される可能性のあるビューには、このオプションを使用しなければなりません。 ビューに対する全てのINSERTUPDATEコマンドは、ビュー定義の条件を満足しているかどうか(新しいデータがビューを通して可視であるかどうか)検査されます。 条件を満たしていない場合、その更新は拒否されます。

LOCAL

このビューの整合性を検査します。

CASCADED

このビューと依存している全てのビューの整合性を検査します。 CASCADEDまたはLOCALのいずれも指定されていない場合は、CASCADEDとして扱われます。

CREATE OR REPLACE VIEWPostgreSQLの言語拡張です。 つまり一時ビューという概念も言語拡張です。

関連項目

ALTER VIEW, DROP VIEW