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

CREATE SCHEMA

名前

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

概要

CREATE SCHEMA 

schema_name

 [ AUTHORIZATION 

user_name

 ] [ 

schema_element

 [ ... ] ]
CREATE SCHEMA AUTHORIZATION 

user_name

 [ 

schema_element

 [ ... ] ]
CREATE SCHEMA IF NOT EXISTS 

schema_name

 [ AUTHORIZATION 

user_name

 ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION 

user_name

説明

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

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

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

パラメータ

schema_name

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

user_name

新しいスキーマを所有するユーザのロール名です。 省略された場合、デフォルトでは、コマンドを実行したユーザになります。 他のロールを所有者とするスキーマを作成するためには、そのロールの直接的または間接的なメンバであるか、スーパーユーザでなければなりません。

schema_element

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

IF NOT EXISTS

同じ名前のスキーマがすでに存在する場合に(注意を発生する以外)何も行いません。 このオプションを使用する場合には schema_element 副コマンドを含めることはできません。

注釈

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

スキーマを作成します。

CREATE SCHEMA myschema;

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

CREATE SCHEMA AUTHORIZATION joe;

test という名前のスキーマがすでに存在していない限り、 joe ユーザによって所有される test という名前のスキーマを作成します。 ( joe が既存のスキーマの所有者であるかどうかは関係ありません。)

CREATE SCHEMA IF NOT EXISTS test 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 権限を他のユーザに与えた場合やスーパーユーザがその中にオブジェクトを作成した場合にのみ発生します。

IF NOT EXISTS オプションは PostgreSQL の拡張です。

関連項目

ALTER SCHEMA , DROP SCHEMA

powered by SEO.CUG.NET