無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

CREATE TABLE AS

名前

CREATE TABLE AS -- 問い合わせの結果によって新しいテーブルを定義する

概要

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE 

table_name


    [ (

column_name

 [, ...] ) ]
    [ WITH ( 

storage_parameter

 [= 

value

] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
    [ TABLESPACE 

tablespace_name

 ]
    AS 

query


    [ WITH [ NO ] DATA ]

説明

CREATE TABLE AS はテーブルを作成し、 SELECT コマンドによって算出されたデータをそのテーブルに格納します。 テーブルの列は、 SELECT の出力列に結び付いた名前とデータ型を持ちます(ただし、新しい列名を明示したリストを渡すと、この列名を上書きすることができます)。

CREATE TABLE AS はビューの作成と似ていますが、実際にはまったく異なります。 CREATE TABLE AS は新しいテーブルを作成し、新しいテーブルの内容を初期化するために一度だけ問い合わせを評価します。 それ以降に行われた、問い合わせの元テーブルに対する変更は、新しいテーブルには反映されません。 反対に、ビューは問い合わせの度に定義された SELECT 文を再評価します。

パラメータ

GLOBAL または LOCAL

互換性を保持するため、無視されます。 これらのキーワードの使用は廃止予定です。 詳細については CREATE TABLE を参照してください。

TEMPORARY or TEMP

指定された場合、テーブルは一時テーブルとして作成されます。 CREATE TABLE を参照してください。

UNLOGGED

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

table_name

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

column_name

新しいテーブルにおける列の名前です。 列名を指定しない場合は、問い合わせの出力列名を利用します。

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

この句は、新しいテーブル用の省略可能な格納パラメータを指定します。 詳細は 格納パラメータ を参照してください。 WITH には、 OIDS=TRUE (もしくは単なる OIDS )を含めて、新しいテーブルの行が行に割り当てられたOID(オブジェクト識別子)を持たなければならないことを指定することもできます。 また、 OIDS=FALSE を含めて、OIDを持たないことを指定することもできます。 詳細は CREATE TABLE を参照してください。

WITH OIDS
WITHOUT OIDS

これらは古い構文で、それぞれ WITH (OIDS) WITH (OIDS=FALSE) と同じです。 OIDS と格納パラメータの設定の両方を指定したい場合、上記の WITH ( ... ) 構文を使用しなければなりません。

ON COMMIT

トランザクションブロックの終了時の一時テーブルの動作を ON COMMIT を使用して制御することができます。 以下の3つのオプションがあります。

PRESERVE ROWS

トランザクションの終了時に特別な処理は何も行われません。 これがデフォルトの動作です。

DELETE ROWS

各トランザクションブロックの終了時に、一時テーブルのすべての行が削除されます。 具体的には、コミット毎に自動的に TRUNCATE が行われます。

DROP

現在のトランザクションブロックの終了時に一時テーブルは削除されます。

TABLESPACE tablespace_name

tablespace_name は、新しいテーブルの作成先となるテーブル空間名です。 指定がなければ、 default_tablespace 、もし一時テーブルの場合は temp_tablespaces が考慮されます。

query

SELECT TABLE VALUES コマンドまたは、あらかじめ準備された SELECT TABLE または VALUES 問い合わせを実行する EXECUTE コマンドです。

WITH [ NO ] DATA

この句は問い合わせで生成されるデータを新しいテーブルにコピーすべきかどうかを指定します。 コピーしない場合はテーブル構造のみがコピーされます。 デフォルトではデータをコピーします。

注釈

このコマンドは、 SELECT INTO と同じ機能を持ちますが、 SELECT INTO 構文の他の使用方法と混乱する可能性が少ないため、こちらを使用する方が良いでしょう。 さらに、 CREATE TABLE AS は、 SELECT INTO が提供する機能のスーパーセットを提供します。

PostgreSQL 8.0より前は、 CREATE TABLE AS が生成するテーブルには、常にOIDが含まれていました。 PostgreSQL 8.0では、ユーザが明示的に CREATE TABLE AS コマンドの結果にOIDを含めるかどうかを指定できるようになりました。 OIDの有無を明示していない場合、 default_with_oids 設定変数が使用されます。 PostgreSQL 8.1では default_with_oids のデフォルトは偽ですので、デフォルトの振舞いは8.0以前のリリースとは異なります。 CREATE TABLE AS が生成するテーブルにおいてOIDが必要なアプリケーションでは、確実に希望する動作をさせるために明示的に WITH (OIDS) を付与しなければなりません。

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

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

テーブルを完全に複製するために、 TABLE コマンドを使った短縮形も使用することができます。

CREATE TABLE films2 AS
  TABLE films;

準備された文を使用して、 films 内の最近の項目のみから構成される films_recent 一時テーブルを作成します。 この新しいテーブルはOIDを持ち、コミット時に削除されます。

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

互換性

CREATE TABLE AS は標準 SQL に従います。 以下は非標準の拡張です。

関連項目

CREATE MATERIALIZED VIEW , CREATE TABLE , EXECUTE , SELECT , SELECT INTO , VALUES

powered by SEO.CUG.NET