★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

SELECT INTO

SELECT INTO — 問い合わせの結果からの新しいテーブルを定義する

概要

[ 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の出力列に関連するデータ型と名前を持ちます。

パラメータ

TEMPORARYまたはTEMP

このオプションが指定された場合、テーブルは一時テーブルとして作成されます。 詳細はCREATE TABLEを参照してください。

UNLOGGED

指定された場合、テーブルはログをとらないテーブルとして作成されます。 詳細はCREATE TABLEを参照してください。

new_table

作成するテーブルの名前です(スキーマ修飾名も可)。

その他のパラメータについては、SELECTで詳細に説明されています。

注釈

CREATE TABLE ASは機能的にはSELECT INTOと同等です。 ECPGPL/pgSQLではINTO句の解釈が異なるため、SELECT INTOという形式は使用できません。 そのため、CREATE TABLE AS構文を使用することをお勧めします。 さらに、CREATE TABLE ASは、SELECT INTOの機能に加え、さらに多くの機能を提供します。

CREATE TABLE ASとは対照的に、SELECT INTOではUSING methodでのテーブルアクセスメソッドやTABLESPACE tablespace_nameでのテーブルのテーブル空間のような属性を指定できません。 必要ならCREATE TABLE ASを使ってください。 そのため、新しいテーブルにはデフォルトテーブルアクセスメソッドが選ばれます。 より詳細な情報はdefault_table_access_methodを参照してください。

テーブルfilmsの最近の項目のみから構成される、新しいテーブルfilms_recentを作成します。

SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';

互換性

標準SQLでは、SELECT INTOは新しいテーブルの作成ではなく、選択した値をホストプログラムのスカラ変数とするために使われます。 これは実際、ECPG第36章を参照)やPL/pgSQL第43章を参照)で見られる使用方法です。 PostgreSQLにおいて、テーブルを作成するSELECT INTOの用法は歴史的なものです。 他のSQL実装でもSELECT INTOをこのように使っているものがあります(が、ほとんどのSQL実装は、その代わりにCREATE TABLE ASをサポートしています)。 そのような互換性の考慮を除けば、新しいコードでは、この目的のためにはCREATE TABLE ASを使うのが最善です。

関連項目

CREATE TABLE AS