CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ] CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name AS query
CREATE TABLE ASはテーブルを作成し、SELECT コマンド、または、準備済のSELECTコマンドを実行するEXECUTEコマンドによって算出されるデータを格納します。 テーブルの列はSELECTの出力列と関連する名前とデータ型を持ちます(ただし この列名は新しい列名を明示したリストを渡すことで無効にすることができます)。
CREATE TABLE ASはビューの作成と似ている部分がありますが、実際は全く異なります。 CREATE TABLE ASは新しいテーブルを作成し、新しいテーブルの内容を初期化するために一度だけその問い合わせを評価します。 それ以降行なわれた、問い合わせの元テーブルに対する変更は、新しいテーブルには反映されません。 反対に、ビューは問い合わせられる度に定義しているSELECT文を再評価します。
互換性のために無視されます。 詳細はCREATE TABLEを参照してください。
指定された場合、テーブルは一時テーブルとして作成されます。 詳細はCREATE TABLEを参照してください。
作成するテーブルの名前です(スキーマ修飾名でも可)。
新しいテーブルにおける列の名前です。 列名を指定しない場合は、問い合わせの出力列名から取られます。 EXECUTEコマンドの実行によってテーブルが作成される場合、列名のリストを指定できません。
この省略可能な句は、CREATE TABLE ASで作成されるテーブルがOIDを持つかどうかを指定します。 この句のいずれも指定していなかった場合はdefault_with_oids設定パラメータの値が使用されます。
問い合わせ文(つまり、SELECTコマンド、もしくは、準備済のSELECTコマンドを実行するEXECUTEコマンド)です。 認められる構文の説明は、それぞれ、SELECT、もしくは、EXECUTEを参照してください。
このコマンドは、SELECT INTOと同じ機能を持ちますが、SELECT INTO構文の他の使用方法と混乱する可能性が少ないため、こちらを使用する方が良いでしょう。 更に、CREATE TABLE ASは、SELECT INTOが提供する機能のスーパーセットを提供します。
PostgreSQL8.0より前では、CREATE TABLE ASが生成するテーブルは常にOIDが含まれていました。 PostgresSQL 8.0では、ユーザは明示的にCREATE TABLE ASコマンドがOIDを含めるかどうかを指定できるようになりました。 もし明示的にOIDの存在を指定していない場合、default_with_oids設定変数が使用されます。 現時点ではdefault_with_oidsのデフォルトは真ですが、今後変更される可能性があります。 そのため、CREATE TABLE ASが生成するテーブルにおいてOIDが必要となるアプリケーションでは明示的にWITH OIDSを付与し、将来のバージョンのPostgreSQLでも互換性を確保できるようにすべきです。
filmsの最近の項目のみから構成される、新しいfilms_recentテーブルを作成します。
CREATE TABLE films_recent AS SELECT * FROM films WHERE date_prod >= '2002-01-01';