スキーマ - Amazon Redshift

スキーマ

データベースには、1 つ以上の名前付きスキーマが含まれています。データベース内の各スキーマには、テーブルや、その他の種類の名前付きオブジェクトが含まれています。デフォルトでは、データベースに、PUBLIC という名前の 1 つのスキーマが含まれています。スキーマを使用すると、共通の名前でデータベースオブジェクトをグループ化できます。スキーマは、ファイルシステムディレクトリに似ていますが、ネストできない点が異なります。

同じデータベース内の異なるスキーマ内で同一のデータベースオブジェクト名を使用でき、競合は生じません。例えば、MY_SCHEMA と YOUR_SCHEMA の両方に、MYTABLE という名前のテーブルを含めることができます。必要なアクセス許可が付与されたユーザーであれば、データベース内の複数のスキーマにわたりオブジェクトにアクセスできます。

デフォルトでは、オブジェクトは、データベースの検索パスに含まれる最初のスキーマ内に作成されます。詳細については、このセクションで後述する「検索パス」を参照してください。

スキーマは、組織において、またマルチユーザー環境での並行処理問題において以下のように有用です。

  • 多数のデベロッパーが相互に妨害せずに同じデータベース内で作業できる。

  • データベースオブジェクトの論理グループを編成して、より管理しやすくする。

  • アプリケーションで使用されるオブジェクトを専用のスキーマに入れる機能をアプリケーションに追加する。これにより、それらのオブジェクトの名前と、別のアプリケーションで使用されるオブジェクトの名前とが競合しなくなる。

スキーマの作成、変更、および削除

あらゆるユーザーがスキーマを作成でき、所有するスキーマを変更または削除できます。

以下のアクションを実行できます。

  • スキーマを作成するには、CREATE SCHEMA コマンドを使用します。

  • スキーマの所有者を変更するには、ALTER SCHEMA コマンドを使用します。

  • スキーマおよびそのオブジェクトを削除するには、DROP SCHEMA コマンドを使用します。

  • スキーマ内にテーブルを作成するには、schema_name.table_name という形式でテーブルを作成します。

すべてのスキーマのリストを表示するには、PG_NAMESPACE システムカタログテーブルをクエリします。

select * from pg_namespace;

スキーマに属するテーブルのリストを表示するには、PG_TABLE_DEF システムカタログテーブルをクエリします。たとえば、次のクエリは PG_CATALOG スキーマのテーブルのリストを返します。

select distinct(tablename) from pg_table_def where schemaname = 'pg_catalog';

検索パス

検索パスは search_path パラメータで定義します。このパラメータに、スキーマ名をカンマで区切ってリストします。検索パスは、オブジェクト (テーブルや関数など) がスキーマ修飾子なしの簡潔な名前で参照されたときにスキーマを検索する順序を指定します。

ターゲットスキーマを指定せずにオブジェクトを作成した場合は、検索パスにリストされている最初のスキーマにオブジェクトが追加されます。同じ名前の複数のオブジェクトが異なるスキーマ内に存在する場合、スキーマが指定されていないオブジェクト名は、その名前のオブジェクトを含む検索パス内の最初のスキーマを参照します。

現行セッションのデフォルトスキーマを変更するには、SET コマンドを使用します。

詳細については、「設定リファレンス」の「search_path」の説明を参照してください。

スキーマベースのアクセス許可。

スキーマベースのアクセス許可は、スキーマ所有者により以下のように決定されます。

  • デフォルトでは、データベースの PUBLIC スキーマに対して、すべてのユーザーが CREATE と USAGE のアクセス許可を持ちます。データベースの PUBLIC スキーマ内に、オブジェクトをユーザーが作成することを禁止するには、REVOKE コマンドを使用して、そのアクセス許可を削除します。

  • オブジェクトの所有者により USAGE のアクセス許可が付与されたユーザーでない限り、ユーザーは、自らが所有していないスキーマに含まれるオブジェクトにアクセスできません。

  • 別のユーザーが作成したスキーマに対する CREATE のアクセス許可が付与されたユーザーは、そのスキーマ内にオブジェクトを作成できます。