role_specificationここでrole_specificationは以下の通りです。SCHEMAを実行すると、現在のデータベースに新しいスキーマが登録されます。スキーマ名は、現在のデータベースにある既存のスキーマとは異なる名前にする必要があります。スキーマは、本質的には名前空間です。スキーマには、名前付きオブジェクト(テーブル、データ型、関数、および演算子)が含まれます。これらのオブジェクトの名前は、他のスキーマに存在する他のオブジェクトの名前と重複しても構いません。名前付きオブジェクトには、スキーマ名を接頭辞としてオブジェクト名を「修飾」するか、必要なスキーマを含んだ検索パスを設定することによってアクセスできます。修飾なしのオブジェクト名を指定したCREATEコマンドは、そのオブジェクトの現在のスキーマ(current_schema関数で決定される検索パスの先頭部分)で作成されます。SCHEMAには、オプションとして、新しいスキーマ内でオブジェクトを作成するためのサブコマンドを付加することができます。サブコマンドは、本質的にはスキーマ作成後に発行される別コマンドと同じように扱われます。AUTHORIZATION句を使用した場合、作成された全てのオブジェクトの所有者が指定したユーザになるという点で異なっています。パラメータschema_name作成するスキーマの名前です。省略された場合、user_nameがスキーマ名として使用されます。スキーマ名をpg_から始めることはできません。このような名前はシステムスキーマ用に予約されているためです。user_name新しいスキーマを所有するユーザのロール名です。省略された場合、デフォルトでは、コマンドを実行したユーザになります。他のロールを所有者とするスキーマを作成するためには、そのロールの直接的または間接的なメンバであるか、スーパーユーザでなければなりません。schema_elementそのスキーマ内で作成されるオブジェクトを定義するSQL文です。TRIGGER、およびGRANTのみが句として使用可能です。他の種類のオブジェクトは、スキーマ作成後に個別のコマンドを使えば作成できます。EXISTS同じ名前のスキーマがすでに存在する場合に(注意を発生する以外)何も行いません。このオプションを使用する場合にはschema_element副コマンドを含めることはできません。注釈スキーマを作成するには、実行するユーザが現在のデータベースにおけるCREATE権限を持っている必要があります。(もちろん、スーパーユーザにはこの制限はありません。)例スキーマを作成します。myschema;joeユーザ用にスキーマを作成します。このスキーマの名前はjoeになります。joe;testという名前のスキーマがすでに存在していなければ、joeユーザによって所有されるtestという名前のスキーマを作成します。(joeが既存のスキーマの所有者であるかどうかは関係ありません。joe;スキーマを作成し、その中にテーブルとビューを作成します。NULL;個々のサブコマンドがセミコロンで終わっていないことに注意してください。以下は、上述のコマンドと等価であり、同じ結果をもたらします。SET句を使用できます。現在PostgreSQLで使用できるよりも多くのサブコマンドを使用できます。SCHEMAのサブコマンドを任意の順序で記述できます。現在のPostgreSQLの実装では、サブコマンドにおいて下方参照ができない場合があります。そのため、下方参照を避ける目的で、サブコマンドの順序を並べ替える必要が生じる可能性もあります。標準SQLでは、スキーマの所有者は、常にそのスキーマ内の全てのオブジェクトを所有します。PostgreSQLでは、スキーマ所有者以外のユーザが所有するオブジェクトを、スキーマに含めることができます。このような状態は、スキーマ所有者が、そのスキーマでのCREATE権限を他のユーザに与えた場合やスーパーユーザがその中にオブジェクトを作成した場合にのみ発生します。EXISTSオプションはPostgreSQLの拡張です。