バージョンごとのドキュメント一覧

CREATE SCHEMA

CREATE SCHEMA <refpurpose>define a new schema</refpurpose> — 新しいスキーマを定義する

概要

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification


<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>

ここでrole_specificationは以下の通りです。

    user_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

説明

<title>Description</title>

<command>CREATE SCHEMA</command> enters a new schema into the current database. The schema name must be distinct from the name of any existing schema in the current database. CREATE SCHEMAを実行すると、現在のデータベースに新しいスキーマが登録されます。 スキーマ名は、現在のデータベースにある既存のスキーマとは異なる名前にする必要があります。

A schema is essentially a namespace: it contains named objects (tables, data types, functions, and operators) whose names can duplicate those of other objects existing in other schemas. Named objects are accessed either by <quote>qualifying</quote> their names with the schema name as a prefix, or by setting a search path that includes the desired schema(s). A <literal>CREATE</literal> command specifying an unqualified object name creates the object in the current schema (the one at the front of the search path, which can be determined with the function <function>current_schema</function>). スキーマは、本質的には名前空間です。 スキーマには、名前付きオブジェクト(テーブル、データ型、関数、および演算子)が含まれます。 これらのオブジェクトの名前は、他のスキーマに存在する他のオブジェクトの名前と重複しても構いません。 名前付きオブジェクトには、スキーマ名を接頭辞としてオブジェクト名を修飾するか、必要なスキーマを含んだ検索パスを設定することによってアクセスできます。 修飾なしのオブジェクト名を指定したCREATEコマンドは、そのオブジェクトの現在のスキーマ(current_schema関数で決定される検索パスの先頭部分)で作成されます。

Optionally, <command>CREATE SCHEMA</command> can include subcommands to create objects within the new schema. The subcommands are treated essentially the same as separate commands issued after creating the schema, except that if the <literal>AUTHORIZATION</literal> clause is used, all the created objects will be owned by that user. CREATE SCHEMAには、オプションとして、新しいスキーマ内でオブジェクトを作成するためのサブコマンドを付加することができます。 サブコマンドは、本質的にはスキーマ作成後に発行される別コマンドと同じように扱われます。 ただし、AUTHORIZATION句を使用した場合、作成された全てのオブジェクトの所有者が指定したユーザになるという点で異なっています。

パラメータ

<title>Parameters</title>
schema_name

The name of a schema to be created. If this is omitted, the <replaceable class="parameter">user_name</replaceable> is used as the schema name. The name cannot begin with <literal>pg_</literal>, as such names are reserved for system schemas. 作成するスキーマの名前です。 省略された場合、user_nameがスキーマ名として使用されます。 スキーマ名をpg_から始めることはできません。 このような名前はシステムスキーマ用に予約されているためです。

user_name

The role name of the user who will own the new schema. If omitted, defaults to the user executing the command. To create a schema owned by another role, you must be able to <literal>SET ROLE</literal> to that role. 新しいスキーマを所有するユーザのロール名です。 省略された場合、デフォルトでは、コマンドを実行したユーザになります。 他のロールを所有者とするスキーマを作成するためには、そのロールに対してSET ROLEができなければなりません。

schema_element

An SQL statement defining an object to be created within the schema. Currently, only <command>CREATE TABLE</command>, <command>CREATE VIEW</command>, <command>CREATE INDEX</command>, <command>CREATE SEQUENCE</command>, <command>CREATE TRIGGER</command> and <command>GRANT</command> are accepted as clauses within <command>CREATE SCHEMA</command>. Other kinds of objects may be created in separate commands after the schema is created. そのスキーマ内で作成されるオブジェクトを定義するSQL文です。 現在、CREATE SCHEMA内では、CREATE TABLECREATE VIEWCREATE INDEXCREATE SEQUENCECREATE TRIGGER、およびGRANTのみが句として使用可能です。 他の種類のオブジェクトは、スキーマ作成後に個別のコマンドを使えば作成できます。

IF NOT EXISTS

Do nothing (except issuing a notice) if a schema with the same name already exists. <replaceable class="parameter">schema_element</replaceable> subcommands cannot be included when this option is used. 同じ名前のスキーマがすでに存在する場合に(注意を発生する以外)何も行いません。 このオプションを使用する場合にはschema_element副コマンドを含めることはできません。

注釈

<title>Notes</title>

To create a schema, the invoking user must have the <literal>CREATE</literal> privilege for the current database. (Of course, superusers bypass this check.) スキーマを作成するには、実行するユーザが現在のデータベースにおけるCREATE権限を持っている必要があります。 (もちろん、スーパーユーザにはこの制限はありません。)

<title>Examples</title>

Create a schema: スキーマを作成します。

CREATE SCHEMA myschema;

Create a schema for user <literal>joe</literal>; the schema will also be named <literal>joe</literal>: joeユーザ用にスキーマを作成します。 このスキーマの名前はjoeになります。

CREATE SCHEMA AUTHORIZATION joe;

Create a schema named <literal>test</literal> that will be owned by user <literal>joe</literal>, unless there already is a schema named <literal>test</literal>. (It does not matter whether <literal>joe</literal> owns the pre-existing schema.) testという名前のスキーマがすでに存在していなければ、joeユーザによって所有されるtestという名前のスキーマを作成します。 (joeが既存のスキーマの所有者であるかどうかは関係ありません。)

CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;

Create a schema and create a table and view within it: スキーマを作成し、その中にテーブルとビューを作成します。

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;

Notice that the individual subcommands do not end with semicolons. 個々のサブコマンドがセミコロンで終わっていないことに注意してください。

The following is an equivalent way of accomplishing the same result: 以下は、上述のコマンドと等価であり、同じ結果をもたらします。

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;

互換性

<title>Compatibility</title>

The SQL standard allows a <literal>DEFAULT CHARACTER SET</literal> clause in <command>CREATE SCHEMA</command>, as well as more subcommand types than are presently accepted by <productname>PostgreSQL</productname>. 標準SQLでは、CREATE SCHEMADEFAULT CHARACTER SET句を使用できます。 また、現在PostgreSQLで使用できるよりも多くのサブコマンドを使用できます。

The SQL standard specifies that the subcommands in <command>CREATE SCHEMA</command> can appear in any order. The present <productname>PostgreSQL</productname> implementation does not handle all cases of forward references in subcommands; it might sometimes be necessary to reorder the subcommands in order to avoid forward references. 標準SQLでは、CREATE SCHEMAのサブコマンドを任意の順序で記述できます。 現在のPostgreSQLの実装では、サブコマンドにおいて下方参照ができない場合があります。 そのため、下方参照を避ける目的で、サブコマンドの順序を並べ替える必要が生じる可能性もあります。

According to the SQL standard, the owner of a schema always owns all objects within it. <productname>PostgreSQL</productname> allows schemas to contain objects owned by users other than the schema owner. This can happen only if the schema owner grants the <literal>CREATE</literal> privilege on their schema to someone else, or a superuser chooses to create objects in it. 標準SQLでは、スキーマの所有者は、常にそのスキーマ内の全てのオブジェクトを所有します。 PostgreSQLでは、スキーマ所有者以外のユーザが所有するオブジェクトを、スキーマに含めることができます。 このような状態は、スキーマ所有者が、そのスキーマでのCREATE権限を他のユーザに与えた場合やスーパーユーザがその中にオブジェクトを作成した場合にのみ発生します。

The <literal>IF NOT EXISTS</literal> option is a <productname>PostgreSQL</productname> extension. IF NOT EXISTSオプションはPostgreSQLの拡張です。

関連項目

<title>See Also</title> ALTER SCHEMA, DROP SCHEMA