CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ]
CREATE SCHEMA を実行すると、現在のデータベースに新しいスキーマを登録します。 スキーマ名は、現在のデータベースにある既存のスキーマとは異なる名前にする必要があります。
スキーマは、本質的には名前空間です。 スキーマには、名前付きオブジェクト (テーブル、データ型、関数、および演算子) が含まれます。 これらのオブジェクトの名前は、他のスキーマに存在する他のオブジェクト名と重複してもかまいません。 名前付きオブジェクトには、スキーマ名を接頭語としてオブジェクト名を"修飾"するか、あるいは必要なスキーマを含んだ検索パスを設定することによって、アクセスできます。 未修飾なオブジェクトは現在のスキーマ(current_schema関数で決定できる、検索パスの先頭のものです。)で作成されます。
オプションで、CREATE SCHEMA には、新しいスキーマ内でオブジェクトを作成するためのサブコマンドを付加することができます。 サブコマンドは、本質的にはスキーマ作成後に発行される別コマンドと同じように扱われます。 ただし、AUTHORIZATION 句が使用されている場合に、作成されたすべてのオブジェクトの所有者が指定したユーザになるという点で異なっています。
作成するスキーマの名前です。 省略された場合、ユーザ名がスキーマ名として使用されます。
スキーマを所有するユーザの名前です。 省略された場合、デフォルトでこのコマンドを実行したユーザになります。 自分以外のユーザを所有者とするスキーマを作成できるのは、スーパーユーザだけです。
そのスキーマ内で作成されるオブジェクトを定義する SQL文です。 現在、CREATE SCHEMA 内では、CREATE TABLE、CREATE VIEW、および GRANT のみが句として使用可能です。 他の種類のオブジェクトは、スキーマ作成後に個別のコマンドで作成できます。
スキーマを作成します。
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 権限を他のユーザに与えた場合にのみ発生します。