CREATE SCHEMA
現在のデータベースの新しいスキーマを定義します。
必要な権限
以下に、CREATE SCHEMA に必要な権限を示します。
スーパーユーザー
CREATE SCHEMA の権限を持つユーザー
構文
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ] [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
パラメータ
- IF NOT EXISTS
-
指定されたスキーマが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更しないで、スキーマが存在するというメッセージを返すことを示す句。
この句は、CREATE SCHEMA で既存のスキーマを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。
- schema_name
-
新しいスキーマの名前。スキーマ名を
PUBLIC
にすることはできません。有効な名前の詳細については、「名前と識別子」を参照してください。注記
search_path 設定パラメータのスキーマリストによって、スキーマ名を指定せずに同じ名前のオブジェクトが参照されたときに、優先するオブジェクトが決まります。
- AUTHORIZATION
-
指定されたユーザーに所有権を付与する句。
- username
-
スキーマ所有者の名前。
- schema_element
-
スキーマ内に作成する 1 つまたは複数のオブジェクトの定義。
- QUOTA
-
指定したスキーマが使用できる最大ディスク容量。この容量は総ディスク使用量です。これには、各コンピューティングノードのすべてのディストリビューションのすべての永続テーブル、指定したスキーマのマテリアライズドビュー、すべてのテーブルの複製されたコピーが含まれます。スキーマクォータでは、一時的な名前空間またはスキーマの一部として作成された一時テーブルは考慮されません。
構成済みのスキーマクォータを表示するには、「SVV_SCHEMA_QUOTA_STATE」を参照してください。
スキーマクォータを超過したレコードを表示するには、「STL_SCHEMA_QUOTA_VIOLATIONS」を参照してください。
Amazon Redshift は選択した値をメガバイトに変換します。値を指定しない場合、デフォルトの測定単位はギガバイトです。
スキーマのクォータを設定および変更するには、データベースのスーパーユーザーである必要があります。スーパーユーザーではなくても、CREATE SCHEMA 権限を持つユーザーは、クォータを定義してスキーマを作成できます。クォータを定義せずにスキーマを作成すると、スキーマのクォータは無制限になります。クォータをスキーマで現在使用されている値よりも低く設定した場合、Amazon Redshift ではディスク容量を解放するまでそれ以上の取り込みを行うことはできません。DELETE ステートメントはテーブルからデータを削除するものであり、ディスク容量は VACUUM が実行された場合にのみ解放されます。
Amazon Redshift は、トランザクションをコミットする前に、各トランザクションのクォータ違反をチェックします。Amazon Redshift は、変更された各スキーマのサイズ (スキーマ内のすべてのテーブルで使用されるディスク容量) を、設定されたクォータに対してチェックします。クォータ違反のチェックはトランザクションの最後に行われるため、トランザクションをコミットする前にトランザクションでクォータを一時的に超過する場合があります。トランザクションがクォータを超過した場合、Amazon Redshift はそのトランザクションを中止し、後続の取り込みを禁止した上で、ディスク容量が解放されるまでの間はすべての変更を元に戻します。バックグラウンドでの VACUUM と内部のクリーンアップが原因で、トランザクションをキャンセルした後にスキーマをチェックするまでの間に、スキーマのサイズに空きが発生する場合があります。
例外として、Amazon Redshift はクォータ違反を無視し、特定の場合にトランザクションをコミットします。Amazon Redshift は、同じトランザクション内に INSERT または COPY の取り込みステートメントが存在しない、次の 1 つ以上のステートメントのみで構成されるトランザクションに対してこれを行います。
-
DELETE
-
TRUNCATE
-
VACUUM
-
DROP TABLE
-
ALTER TABLE APPEND (サイズに空きのないスキーマから空きのあるスキーマにデータを移動する場合のみ)
-
- UNLIMITED
-
Amazon Redshift は、スキーマの合計サイズの増加に制限を課しません。
制限
Amazon Redshift では、スキーマに次の制限があります。
-
スキーマの数は 1 つのデータベースにつき最大 9900 個です。
例
次の例では、US_SALES というスキーマを作成し、DWUSER というユーザーに所有権を付与します。
create schema us_sales authorization dwuser;
次の例では、US_SALES というスキーマを作成し、DWUSER というユーザーに所有権を付与し、クォータを 50 GB に設定します。
create schema us_sales authorization dwuser QUOTA 50 GB;
新しいスキーマを確認するには、次に示すように PG_NAMESPACE カタログテーブルに対してクエリを実行します。
select nspname as schema, usename as owner from pg_namespace, pg_user where pg_namespace.nspowner = pg_user.usesysid and pg_user.usename ='dwuser'; schema | owner ----------+---------- us_sales | dwuser (1 row)
次の例では、US_SALES スキーマを作成します。そのスキーマが既に存在する場合は、何もしないでメッセージを返します。
create schema if not exists us_sales;