.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "CREATE TABLE AS" "" "2005-01-19" "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
PostgreSQL8.0より前では、\fBCREATE TABLE AS\fRが生成するテーブルは常にOIDが含まれていました。
PostgresSQL 8.0では、ユーザは明示的に\fBCREATE TABLE AS\fRコマンドがOIDを含めるかどうかを指定できるようになりました。
もし明示的にOIDの存在を指定していない場合、default_with_oids設定変数が使用されます。
現時点ではdefault_with_oidsのデフォルトは真ですが、今後変更される可能性があります。
そのため、\fBCREATE TABLE AS\fRが生成するテーブルにおいてOIDが必要となるアプリケーションでは明示的にWITH OIDSを付与し、将来のバージョンのPostgreSQLでも互換性を確保できるようにすべきです。
.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:2003標準で規定されています。
SQL:2003におけるコマンド定義とPostgreSQLにおける実装との間には以下のような違いがあります。
.TP 0.2i
\(bu
標準では副問い合わせ句を括弧で括る必要がありますが、PostgreSQLではこの括弧は省略可能です。
.TP 0.2i
\(bu
標準ではON COMMIT句を定義していますが、現在のPostgreSQLでは実装されていません。
.TP 0.2i
\(bu
標準ではWITH DATA句を定義していますが、現在のPostgreSQLでは実装されていません。
.PP
.SH "関連項目"
CREATE TABLE [\fBcreate_table\fR(l)], EXECUTE [\fBexecute\fR(l)], SELECT [\fBselect\fR(l)], SELECT INTO [\fBselect_into\fR(l)]
