CREATE SCHEMA <refpurpose>define a new schema</refpurpose> — 新しいスキーマを定義する
CREATE SCHEMAschema_name
[ AUTHORIZATIONrole_specification
] [schema_element
[ ... ] ] CREATE SCHEMA AUTHORIZATIONrole_specification
[schema_element
[ ... ] ] CREATE SCHEMA IF NOT EXISTSschema_name
[ AUTHORIZATIONrole_specification
] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONrole_specification
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase> ここでrole_specification
は以下の通りです。user_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
<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
句を使用した場合、作成された全てのオブジェクトの所有者が指定したユーザになるという点で異なっています。
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 TABLE
、CREATE VIEW
、CREATE INDEX
、CREATE SEQUENCE
、CREATE 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
副コマンドを含めることはできません。
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
権限を持っている必要があります。
(もちろん、スーパーユーザにはこの制限はありません。)
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;
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 SCHEMA
でDEFAULT 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の拡張です。