PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# CREATE TABLE AS

## 名前

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

## 概要

    CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
    CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name
        AS query

## 説明

`CREATE TABLE AS`はテーブルを作成し、`SELECT` コマンド、または、準備済の`SELECT`コマンドを実行する`EXECUTE`コマンドによって算出されるデータを格納します。 テーブルの列は`SELECT`の出力列と関連する名前とデータ型を持ちます(ただし この列名は新しい列名を明示したリストを渡すことで無効にすることができます)。

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

## パラメータ

`GLOBAL` or `LOCAL`

  互換性のために無視されます。 詳細はCREATE TABLEを参照してください。

`TEMPORARY` or `TEMP`

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

`table_name`

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

`column_name`

  新しいテーブルにおける列の名前です。 列名を指定しない場合は、問い合わせの出力列名から取られます。 `EXECUTE`コマンドの実行によってテーブルが作成される場合、列名のリストを指定できません。

`WITH OIDS`
`WITHOUT OIDS`

  この省略可能な句は、`CREATE TABLE AS`で作成されるテーブルがOIDを持つかどうかを指定します。 この句のいずれも指定していなかった場合はdefault_with_oids設定パラメータの値が使用されます。

`query`

  問い合わせ文(つまり、`SELECT`コマンド、もしくは、準備済の`SELECT`コマンドを実行する`EXECUTE`コマンド)です。 認められる構文の説明は、それぞれ、SELECT、もしくは、EXECUTEを参照してください。

## 注釈

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

PostgreSQL8.0より前では、`CREATE TABLE AS`が生成するテーブルは常にOIDが含まれていました。 PostgresSQL 8.0では、ユーザは明示的に`CREATE TABLE AS`コマンドがOIDを含めるかどうかを指定できるようになりました。 もし明示的にOIDの存在を指定していない場合、default_with_oids設定変数が使用されます。 現時点ではdefault_with_oidsのデフォルトは真ですが、今後変更される可能性があります。 そのため、`CREATE TABLE AS`が生成するテーブルにおいてOIDが必要となるアプリケーションでは明示的に`WITH OIDS`を付与し、将来のバージョンのPostgreSQLでも互換性を確保できるようにすべきです。

## 例

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

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

## 互換性

`CREATE TABLE AS`はSQL:2003標準で規定されています。 SQL:2003におけるコマンド定義とPostgreSQLにおける実装との間には以下のような違いがあります。

- 標準では副問い合わせ句を括弧で括る必要がありますが、PostgreSQLではこの括弧は省略可能です。

- 標準では`ON COMMIT`句を定義していますが、現在のPostgreSQLでは実装されていません。

- 標準では`WITH DATA`句を定義していますが、現在のPostgreSQLでは実装されていません。

## 関連項目

CREATE TABLE, EXECUTE, SELECT, SELECT INTO

前のページ | ホーム | 次のページ
CREATE TABLE | 上に戻る | CREATE TABLESPACE