バージョンごとのドキュメント一覧

CREATE TABLE AS

CREATE TABLE AS <refpurpose>define a new table from the results of a query</refpurpose> — 問い合わせの結果によって新しいテーブルを定義する

概要

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    [ (column_name [, ...] ) ]
    [ USING method ]
    [ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
    [ TABLESPACE tablespace_name ]
    AS query
    [ WITH [ NO ] DATA ]

説明

<title>Description</title>

<command>CREATE TABLE AS</command> creates a table and fills it with data computed by a <command>SELECT</command> command. The table columns have the names and data types associated with the output columns of the <command>SELECT</command> (except that you can override the column names by giving an explicit list of new column names). CREATE TABLE ASはテーブルを作成し、SELECT コマンドによって算出されたデータをそのテーブルに格納します。 テーブルの列は、SELECTの出力列に結び付いた名前とデータ型を持ちます(ただし、新しい列名を明示したリストを渡すと、この列名を上書きすることができます)。

<command>CREATE TABLE AS</command> bears some resemblance to creating a view, but it is really quite different: it creates a new table and evaluates the query just once to fill the new table initially. The new table will not track subsequent changes to the source tables of the query. In contrast, a view re-evaluates its defining <command>SELECT</command> statement whenever it is queried. CREATE TABLE ASはビューの作成と似ていますが、実際にはまったく異なります。 CREATE TABLE ASは新しいテーブルを作成し、新しいテーブルの内容を初期化するために一度だけ問い合わせを評価します。 それ以降に行われた、問い合わせの元テーブルに対する変更は、新しいテーブルには反映されません。 反対に、ビューは問い合わせの度に定義されたSELECT文を再評価します。

<command>CREATE TABLE AS</command> requires <literal>CREATE</literal> privilege on the schema used for the table. CREATE TABLE ASには、そのテーブルに使われているスキーマでのCREATE権限が必要です。

パラメータ

<title>Parameters</title>
GLOBALまたはLOCAL

Ignored for compatibility. Use of these keywords is deprecated; refer to <xref linkend="sql-createtable"/> for details. 互換性を保持するためのキーワードで、無視されます。 これらのキーワードの使用は廃止予定です。 詳細についてはCREATE TABLEを参照してください。

TEMPORARYまたはTEMP

If specified, the table is created as a temporary table. Refer to <xref linkend="sql-createtable"/> for details. 指定された場合、テーブルは一時テーブルとして作成されます。 詳細についてはCREATE TABLEを参照してください。

UNLOGGED

If specified, the table is created as an unlogged table. Refer to <xref linkend="sql-createtable"/> for details. 指定された場合、テーブルはログを取らないテーブルとして作成されます。 詳細についてはCREATE TABLEを参照してください。

IF NOT EXISTS

Do not throw an error if a relation with the same name already exists; simply issue a notice and leave the table unmodified. 同じ名前のリレーションが既に存在する場合にエラーとしません。 単に通知を発行するだけで、テーブルは変更しないままにします。

table_name

The name (optionally schema-qualified) of the table to be created. 作成するテーブルの名前です(スキーマ修飾名も可)。

column_name

The name of a column in the new table. If column names are not provided, they are taken from the output column names of the query. 新しいテーブルにおける列の名前です。 列名を指定しない場合は、問い合わせの出力列名を利用します。

USING method

This optional clause specifies the table access method to use to store the contents for the new table; the method needs be an access method of type <literal>TABLE</literal>. See <xref linkend="tableam"/> for more information. If this option is not specified, the default table access method is chosen for the new table. See <xref linkend="guc-default-table-access-method"/> for more information. この省略可能な句は、新しいテーブルの内容を保存するのに使うテーブルアクセスメソッドを指定します。メソッドはTABLE型のアクセスメソッドであることが必要です。 より詳しい情報は第61章を参照してください。 このオプションが指定されなければ、新しいテーブルに対してはデフォルトのテーブルアクセスメソッドが選ばれます。 より詳しい情報はdefault_table_access_methodを参照してください。

WITH ( storage_parameter [= value] [, ... ] )

This clause specifies optional storage parameters for the new table; see <xref linkend="sql-createtable-storage-parameters"/> in the <xref linkend="sql-createtable"/> documentation for more information. For backward-compatibility the <literal>WITH</literal> clause for a table can also include <literal>OIDS=FALSE</literal> to specify that rows of the new table should contain no OIDs (object identifiers), <literal>OIDS=TRUE</literal> is not supported anymore. この句は、新しいテーブル用の格納パラメータ(省略可能)を指定します。 詳細はCREATE TABLEの文書の格納パラメータを参照してください。 後方互換のため、テーブルに対するWITH句には、OID(オブジェクト識別子)を持たないことを指定するOIDS=FALSEを含めることもできます。OIDS=TRUEは今はもうサポートされていません。

WITHOUT OIDS

This is backward-compatible syntax for declaring a table <literal>WITHOUT OIDS</literal>, creating a table <literal>WITH OIDS</literal> is not supported anymore. これは、テーブルがWITHOUT OIDSであることを宣言する後方互換のための構文で、WITH OIDSであるテーブルを作成することは今はもうサポートされていません。

ON COMMIT

The behavior of temporary tables at the end of a transaction block can be controlled using <literal>ON COMMIT</literal>. The three options are: トランザクションブロックの終了時の一時テーブルの動作をON COMMITを使用して制御することができます。 以下の3つのオプションがあります。

PRESERVE ROWS

No special action is taken at the ends of transactions. This is the default behavior. トランザクションの終了時に特別な処理は何も行われません。 これがデフォルトの動作です。

DELETE ROWS

All rows in the temporary table will be deleted at the end of each transaction block. Essentially, an automatic <link linkend="sql-truncate"><command>TRUNCATE</command></link> is done at each commit. 各トランザクションブロックの終了時に、一時テーブルのすべての行が削除されます。 本質的には、コミット毎に自動的にTRUNCATEが行われます。

DROP

The temporary table will be dropped at the end of the current transaction block. 現在のトランザクションブロックの終了時に一時テーブルは削除されます。

TABLESPACE tablespace_name

The <replaceable class="parameter">tablespace_name</replaceable> is the name of the tablespace in which the new table is to be created. If not specified, <xref linkend="guc-default-tablespace"/> is consulted, or <xref linkend="guc-temp-tablespaces"/> if the table is temporary. tablespace_nameは、新しいテーブルの作成先となるテーブル空間名です。 指定がなければ、default_tablespace、一時テーブルの場合はtemp_tablespacesが考慮されます。

query

A <link linkend="sql-select"><command>SELECT</command></link>, <link linkend="sql-table"><command>TABLE</command></link>, or <link linkend="sql-values"><command>VALUES</command></link> command, or an <link linkend="sql-execute"><command>EXECUTE</command></link> command that runs a prepared <command>SELECT</command>, <command>TABLE</command>, or <command>VALUES</command> query. SELECTTABLEVALUESコマンドまたは、あらかじめ準備されたSELECTTABLEまたはVALUES問い合わせを実行するEXECUTEコマンドです。

WITH [ NO ] DATA

This clause specifies whether or not the data produced by the query should be copied into the new table. If not, only the table structure is copied. The default is to copy the data. この句は問い合わせで生成されるデータを新しいテーブルにコピーすべきかどうかを指定します。 コピーしない場合はテーブル構造のみがコピーされます。 デフォルトではデータをコピーします。

注釈

<title>Notes</title>

This command is functionally similar to <xref linkend="sql-selectinto"/>, but it is preferred since it is less likely to be confused with other uses of the <command>SELECT INTO</command> syntax. Furthermore, <command>CREATE TABLE AS</command> offers a superset of the functionality offered by <command>SELECT INTO</command>. このコマンドは、SELECT INTOと同等の機能を持ちますが、SELECT INTO構文の他の使用方法と混乱する可能性が少ないため、こちらを使用する方が良いでしょう。 さらに、CREATE TABLE ASは、SELECT INTOが提供する機能のスーパーセットを提供します。

<title>Examples</title>

Create a new table <literal>films_recent</literal> consisting of only recent entries from the table <literal>films</literal>: filmsの最近の項目のみから構成される、新しいテーブルfilms_recentを作成します。

CREATE TABLE films_recent AS
  SELECT * FROM films WHERE date_prod >= '2002-01-01';

To copy a table completely, the short form using the <literal>TABLE</literal> command can also be used: テーブルを完全に複製するために、TABLEコマンドを使った短縮形も使用することができます。

CREATE TABLE films2 AS
  TABLE films;

Create a new temporary table <literal>films_recent</literal>, consisting of only recent entries from the table <literal>films</literal>, using a prepared statement. The new table will be dropped at commit: プリペアド文を使用して、films内の最近の項目のみから構成される一時テーブルfilms_recentを作成します。 この新しいテーブルはコミット時に削除されます。

PREPARE recentfilms(date) AS
  SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent ON COMMIT DROP AS
  EXECUTE recentfilms('2002-01-01');

互換性

<title>Compatibility</title>

<command>CREATE TABLE AS</command> conforms to the <acronym>SQL</acronym> standard. The following are nonstandard extensions: CREATE TABLE ASは標準SQLに従います。 以下は非標準の拡張です。

  • The standard requires parentheses around the subquery clause; in <productname>PostgreSQL</productname>, these parentheses are optional. 標準では副問い合わせ句を括弧で囲む必要がありますが、PostgreSQLではこの括弧は省略可能です。

  • In the standard, the <literal>WITH [ NO ] DATA</literal> clause is required; in PostgreSQL it is optional. 標準ではWITH [ NO ] DATA句は必須ですが、PostgreSQLでは省略可能です。

  • <para><productname>PostgreSQL</productname> handles temporary tables in a way rather different from the standard; see <xref linkend="sql-createtable"/> for details.

    PostgreSQLの一時テーブルの扱いは標準とは異なります。 詳細はCREATE TABLEを参照してください。

  • The <literal>WITH</literal> clause is a <productname>PostgreSQL</productname> extension; storage parameters are not in the standard. WITH句はPostgreSQLの拡張です。 格納パラメータは標準にはありません。

  • The <productname>PostgreSQL</productname> concept of tablespaces is not part of the standard. Hence, the clause <literal>TABLESPACE</literal> is an extension. PostgreSQLのテーブル空間という概念は標準にはありません。 したがって、TABLESPACE句は拡張です。

関連項目

<title>See Also</title> CREATE MATERIALIZED VIEW, CREATE TABLE, EXECUTE, SELECT, SELECT INTO, VALUES