CREATE VIEW は問い合わせによるビューを定義します。 ビューは物理的な実体として存在するものではありません。 その代わりに、ある問い合わせからビューが参照される度に、指定された問い合わせが実行されます。
CREATE OR REPLACE VIEW も同様の働きをします。 しかし、同じ名前のビューがすでに存在している場合は、そのビューを置き換えます。 ビューは、同じ列の集合 (つまり、同じ列名およびデータ型) を生成する新規の問い合わせでのみ、置き換えることができます。
スキーマ名が付けられている場合 (たとえば、CREATE VIEW myschema.myview ...)、ビューは指定されたスキーマで作成されます。 スキーマ名がなければ、そのビューは現在のスキーマで作成されます。 ビューの名前は、同じスキーマ内の他のビュー、テーブル、シーケンス、もしくはインデックスとは異なる名前である必要があります。
作成するビューの名前です (スキーマ修飾名でも可)。
ビューの列に使用する名前のリストです (省略可能)。 省略されている場合、列名は問い合わせから由来したものになります。
ビューの列と行を生成する問い合わせ (つまり SELECT 文) です。
有効な問い合わせについての詳細は、SELECT を参照してください。
現在のところ、ビューは読み取り専用です。 システムは、ビューに対する挿入、更新、削除を許可しません。 ビューに対する挿入などを他のテーブルに対する適切な処理に書き換えるルールを作成することで、更新可能なビューと同じ効果を得ることができます。 より詳細な情報については、CREATE RULE を参照して下さい。
ビューを削除するには、DROP VIEW 文を使用します。
ビューの列の名前と型は指定通りに割り当てられることに注意してください。 例えば、
CREATE VIEW vista AS SELECT 'Hello World';
は、次の2点から良くありません。 列の名前はデフォルトの?column?になり、列のデータ型はデフォルトのunknownになります。 ビューの結果として文字リテラルを返したい場合は、以下のように使用してください。
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
ビュー内で参照するテーブルへのアクセスは、ビューの所有者の権限で決定されます。 しかし、ビュー内で実行される関数は、ビューを使用する問い合わせから直接その関数が呼び出された場合と同様に扱われます。 したがって、ビューを使用するユーザには、ビュー内で使用される全ての関数を呼び出す権限が必要です。
全ての娯楽映画 (Comedy films) から成るビューを作成します。
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
標準SQL では、CREATE VIEW 文に対しいくつかの追加機能を規定しています。
CREATE VIEW name [ ( column [, ...] ) ] AS query [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完全な SQL コマンドのオプション句は、以下の通りです。
このオプションは、更新される可能性のあるビューに使用します。 ビューに対する全ての INSERT と UPDATE コマンドは、ビュー定義の条件を満足しているか(つまり、新しいデータがビューを通して可視であるか)どうかチェックされます。 条件を満たしていない場合、その更新は拒否されます。
このビューの整合性をチェックします。
このビューと依存している全てのビューの整合性をチェックします。 CASCADE または LOCAL のいずれも指定されていない場合は、CASCADE が指定されたものと仮定されます。
CREATE OR REPLACE VIEW は PostgreSQL の言語拡張です。