SELECT INTO — 問い合わせの結果からの新しいテーブルを定義する
[ WITH [ RECURSIVE ]with_query[, ...] ] SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] * |expression[ [ AS ]output_name] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ]new_table[ FROMfrom_item[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition[, ...] ] [ WINDOWwindow_nameAS (window_definition) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ]select] [ ORDER BYexpression[ ASC | DESC | USINGoperator] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT {count| ALL } ] [ OFFSETstart[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [count] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OFtable_name[, ...] ] [ NOWAIT ] [...] ]
SELECT INTOは新しいテーブルを作成し、そこに問い合わせによって計算したデータを格納します。
このデータは通常のSELECTのようにはクライアントに返されません。
新しいテーブルの列はSELECTの出力列に関連するデータ型と名前を持ちます。
TEMPORARYまたはTEMPこのオプションが指定された場合、テーブルは一時テーブルとして作成されます。 詳細はCREATE TABLEを参照してください。
UNLOGGED指定された場合、テーブルはログをとらないテーブルとして作成されます。 詳細はCREATE TABLEを参照してください。
new_table作成するテーブルの名前です(スキーマ修飾名も可)。
その他のパラメータについては、SELECTで詳細に説明されています。
CREATE TABLE ASは機能的にはSELECT INTOと同等です。
ECPGやPL/pgSQLではINTO句の解釈が異なるため、SELECT INTOという形式は使用できません。
そのため、CREATE TABLE AS構文を使用することをお勧めします。
さらに、CREATE TABLE ASは、SELECT INTOの機能に加え、さらに多くの機能を提供します。
CREATE TABLE ASとは対照的に、SELECT INTOではUSING でのテーブルアクセスメソッドやmethodTABLESPACE でのテーブルのテーブル空間のような属性を指定できません。
必要ならCREATE TABLE ASを使ってください。
そのため、新しいテーブルにはデフォルトテーブルアクセスメソッドが選ばれます。
より詳細な情報はdefault_table_access_methodを参照してください。
tablespace_name
テーブルfilmsの最近の項目のみから構成される、新しいテーブルfilms_recentを作成します。
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
標準SQLでは、SELECT INTOは新しいテーブルの作成ではなく、選択した値をホストプログラムのスカラ変数とするために使われます。
これは実際、ECPG(第35章を参照)やPL/pgSQL(第42章を参照)で見られる使用方法です。
PostgreSQLにおいて、テーブルを作成するSELECT INTOの用法は歴史的なものです。
新しいコードでは、テーブルの作成にはCREATE TABLE ASを使うのが最善です。