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

# CREATE SCHEMA

## 名前

CREATE SCHEMA -- 新しいスキーマを定義する

## 概要

    CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ]
    CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ]

## 説明

`CREATE SCHEMA`を実行すると、現在のデータベースに新しいスキーマが登録されます。 スキーマ名は、現在のデータベースにある既存のスキーマとは異なる名前にする必要があります。

スキーマは、本質的には名前空間です。 スキーマには、名前付きオブジェクト（テーブル、データ型、関数、および演算子）が含まれます。 これらのオブジェクトの名前は、他のスキーマに存在する他のオブジェクトの名前と重複しても構いません。 名前付きオブジェクトには、スキーマ名を接頭辞としてオブジェクト名を"修飾"するか、必要なスキーマを含んだ検索パスを設定することによってアクセスできます。 オブジェクト名を修飾しないで指定した`CREATE`コマンドは、そのオブジェクトの現在のスキーマ（`current_schema`関数で決定される検索パスの先頭部分）で作成されます。

`CREATE SCHEMA`には、オプションとして、新しいスキーマ内でオブジェクトを作成するためのサブコマンドを付加することができます。 サブコマンドは、本質的にはスキーマ作成後に発行される別コマンドと同じように扱われます。 ただし、`AUTHORIZATION`句を使用した場合、作成された全てのオブジェクトの所有者が指定したユーザになるという点で異なっています。

## パラメータ

`schemaname`

  作成するスキーマの名前です。 省略された場合、ユーザ名がスキーマ名として使用されます。 スキーマ名を`pg_`から始めることはできません。 このような名前はシステムスキーマ用に予約されているためです。

`username`

  スキーマを所有するユーザの名前です。 省略された場合、デフォルトでは、コマンドを実行したユーザになります。 自分以外のユーザを所有者とするスキーマを作成できるのは、スーパーユーザだけです。

`schema_element`

  そのスキーマ内で作成されるオブジェクトを定義するSQL文です。 現在、`CREATE SCHEMA`内では、`CREATE TABLE`、`CREATE VIEW`、`CREATE INDEX`、`CREATE SEQUENCE`、`CREATE TRIGGER`、および`GRANT`のみが句として使用可能です。 他の種類のオブジェクトは、スキーマ作成後に個別のコマンドを使えば作成できます。

## 注釈

スキーマを作成するには、実行するユーザが現在のデータベースにおける`CREATE`権限を持っている必要があります。 （もちろん、スーパーユーザにはこの制限はありません）。

## 例

スキーマを作成します。

    CREATE SCHEMA myschema;

`joe`ユーザ用にスキーマを作成します。 このスキーマの名前は`joe`になります。

    CREATE SCHEMA AUTHORIZATION joe;

スキーマを作成し、その中にテーブルとビューを作成します。

    CREATE SCHEMA hollywood
        CREATE TABLE films (title text, release date, awards text[])
        CREATE VIEW winners AS
            SELECT title, release FROM films WHERE awards IS NOT NULL;

個々のサブコマンドがセミコロンで終わっていないことに注意してください。

以下は、上述のコマンドと等価であり、同じ結果をもたらします。

    CREATE SCHEMA hollywood;
    CREATE TABLE hollywood.films (title text, release date, awards text[]);
    CREATE VIEW hollywood.winners AS
        SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;

## 互換性

標準SQLでは、`CREATE SCHEMA`で`DEFAULT CHARACTER SET`句を使用できます。 同様に、現在PostgreSQLで使用できるよりも多くのサブコマンドを使用できます。

標準SQLでは、`CREATE SCHEMA`のサブコマンドを任意の順序で記述できます。 現在のPostgreSQLの実装では、サブコマンドにおいて下方参照ができない場合があります。 そのため、下方参照を避ける目的で、サブコマンドの順序を並べ替える必要が生じる可能性もあります。

標準SQLでは、スキーマの所有者は、常にそのスキーマ内の全てのオブジェクトを所有します。 PostgreSQLでは、スキーマ所有者以外のユーザが所有するオブジェクトを、スキーマに含めることができます。 このような状態は、スキーマ所有者が、そのスキーマでの`CREATE`権限を他のユーザに与えた場合にのみ発生します。

## 関連項目

ALTER SCHEMA, DROP SCHEMA

前のページ | ホーム | 次のページ
CREATE RULE | 上に戻る | CREATE SEQUENCE