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
[, ...] ) ] [ USINGmethod
] [ WITH (storage_parameter
[=value
] [, ... ] ) | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACEtablespace_name
] ASquery
[ WITH [ NO ] DATA ]
<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
権限が必要です。
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.
SELECT
、TABLE
、VALUES
コマンドまたは、あらかじめ準備されたSELECT
、TABLE
または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. この句は問い合わせで生成されるデータを新しいテーブルにコピーすべきかどうかを指定します。 コピーしない場合はテーブル構造のみがコピーされます。 デフォルトではデータをコピーします。
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
が提供する機能のスーパーセットを提供します。
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');
<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では省略可能です。
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
句は拡張です。