[ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ [ AS ] output_name ] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
SELECT INTOは新しいテーブルを作成し、そこに問い合わせによって計算したデータを格納します。 このデータは通常のSELECTのようにはクライアントに返されません。 新しいテーブルの列はSELECTの出力列に関連するデータ型と名前を持ちます。
このオプションが指定された場合、テーブルは一時テーブルとして作成されます。 詳細はCREATE TABLEを参照してください。
指定された場合、テーブルはログをとらないテーブルとして作成されます。 CREATE TABLEを参照してください。
作成するテーブルの名前です(スキーマ修飾名も可)。
その他のパラメータについては、SELECTで詳細に説明されています。
CREATE TABLE ASは機能的にはSELECT INTOと同じです。 INTO句の解釈が異なるため、SELECT INTOという形式はECPGやPL/pgSQLでは使用できません。 そのため、CREATE TABLE AS構文を使用することをお勧めします。 さらに、CREATE TABLE ASは、SELECT INTOの機能に加え、さらに多くの機能を提供します。
PostgreSQL 8.1より前は、 SELECT INTOで作成されるテーブルはデフォルトでOIDを含んでいました。 PostgreSQL 8.1ではこの問題はありません。 新しいテーブルにOIDを含めたければ、 default_with_oids設定変数を有効にする必要があります。 WITH OIDS句を付けてCREATE TABLE ASを実行するという別の方法もあります。
filmsテーブルの最近の項目のみから構成される、新しいfilms_recentテーブルを作成します。
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';