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