.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "CREATE TABLE AS" "" "2006-10-20" "SQL - 言語" "SQLコマンド"
.SH NAME
CREATE TABLE AS \- 問い合わせの結果によって新しいテーブルを定義する

.SH SYNOPSIS
.sp
.nf
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE \fItable_name\fR
    [ (\fIcolumn_name\fR [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE \fItable_name\fR
    AS \fIquery\fR
.sp
.fi
.SH "説明"
.PP
\fBCREATE TABLE AS\fRはテーブルを作成し、\fBSELECT\fR コマンド、または、あらかじめ用意された\fBSELECT\fRコマンドを実行する\fBEXECUTE\fRコマンドによって算出されたデータをそのテーブルに格納します。
テーブルの列は、\fBSELECT\fRの出力列に結び付いた名前とデータ型を持ちます（ただし、新しい列名を明示したリストを渡すと、この列名を上書きすることができます）。
.PP
\fBCREATE TABLE AS\fRはビューの作成と似ていますが、実際にはまったく異なります。
\fBCREATE TABLE AS\fRは新しいテーブルを作成し、新しいテーブルの内容を初期化するために一度だけ問い合わせを評価します。
それ以降に行われた、問い合わせの元テーブルに対する変更は、新しいテーブルには反映されません。
反対に、ビューは問い合わせの度に定義された\fBSELECT\fR文を再評価します。
.SH "パラメータ"
.TP
\fBGLOBAL or LOCAL\fR
互換性を保持するため、無視されます。
詳細はCREATE TABLE [\fBcreate_table\fR(l)]を参照してください。
.PP
.TP
\fBTEMPORARY or TEMP\fR
指定された場合、テーブルは一時テーブルとして作成されます。
詳細はCREATE TABLE [\fBcreate_table\fR(l)]を参照してください。
.TP
\fB\fItable_name\fB\fR
作成するテーブルの名前です（スキーマ修飾名も可）。
.TP
\fB\fIcolumn_name\fB\fR
新しいテーブルにおける列の名前です。
列名を指定しない場合は、問い合わせの出力列名を利用します。
\fBEXECUTE\fRコマンドを実行してテーブルを作成する場合は、列名のリストを指定できません。
.TP
\fBWITH OIDS\fR
.TP
\fBWITHOUT OIDS\fR
\fBCREATE TABLE AS\fRで作成されるテーブルがOIDを持つかどうかを指定します。この句は省略可能です。
いずれも指定しなかった場合はdefault_with_oids設定パラメータの値が使用されます。
.TP
\fB\fIquery\fB\fR
問い合わせ文（\fBSELECT\fRコマンド、もしくはあらかじめ用意された\fBSELECT\fRコマンドを実行する\fBEXECUTE\fRコマンド）。
使用できる構文については、それぞれ、SELECT [\fBselect\fR(l)]、EXECUTE [\fBexecute\fR(l)]を参照してください。
.SH "注釈"
.PP
このコマンドは、SELECT INTO [\fBselect_into\fR(l)]と同じ機能を持ちますが、\fBSELECT INTO\fR構文の他の使用方法と混乱する可能性が少ないため、こちらを使用する方が良いでしょう。
さらに、\fBCREATE TABLE AS\fRは、\fBSELECT INTO\fRが提供する機能のスーパーセットを提供します。
.PP
PostgreSQL 8.0より前は、\fBCREATE TABLE AS\fRが生成するテーブルには、常にOIDが含まれていました。
PostgreSQL 8.0では、ユーザが明示的に\fBCREATE TABLE AS\fRコマンドの結果にOIDを含めるかどうかを指定できるようになりました。
OIDの有無を明示していない場合、default_with_oids設定変数が使用されます。
PostgreSQL 8.1ではdefault_with_oidsのデフォルトは偽ですので、デフォルトの振舞いは8.0以前のリリースとは異なります。
\fBCREATE TABLE AS\fRが生成するテーブルにおいてOIDが必要なアプリケーションでは、確実に適切な動作をさせるために明示的にWITH OIDSを付与しなければなりません。
.SH "例"
.PP
filmsの最近の項目のみから構成される、新しいfilms_recentテーブルを作成します。
.sp
.nf
CREATE TABLE films_recent AS
  SELECT * FROM films WHERE date_prod >= '2002-01-01';
.sp
.fi
.SH "互換性"
.PP
以下の違いを除き、\fBCREATE TABLE AS\fRは標準SQLに従います。
.TP 0.2i
\(bu
標準では副問い合わせ句を括弧で囲む必要がありますが、PostgreSQLではこの括弧は省略可能です。
.TP 0.2i
\(bu
標準ではON COMMIT句が定義されていますが、現在のPostgreSQLでは実装されていません。
.TP 0.2i
\(bu
標準ではWITH [ NO ] DATA句を定義していますが、現在のPostgreSQLでは実装されていません。
PostgreSQLの動作は標準におけるWITH DATAの場合と同じです。
.TP 0.2i
\(bu
WITH/WITHOUT OIDSはPostgreSQLの拡張です。
.TP 0.2i
\(bu
PostgreSQLの一時テーブルの扱いは標準とは異なります。
詳細はCREATE TABLE [\fBcreate_table\fR(l)]を参照してください。
.PP
.SH "関連項目"
CREATE TABLE [\fBcreate_table\fR(l)], EXECUTE [\fBexecute\fR(l)], SELECT [\fBselect\fR(l)], SELECT INTO [\fBselect_into\fR(l)]
