メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

スキーマ

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

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

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

スキーマは、組織において、また、マルチユーザー環境での並行処理問題において、以下の方法で役立ちます。

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

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

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

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

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

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

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

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

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

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

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

Copy
select * from pg_namespace;

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

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

検索パス

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

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

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

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

スキーマベースの権限

スキーマベースの特権は、スキーマ所有者が以下のように決定します。

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

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

  • 別のユーザーが作成したスキーマに対する CREATE 特権をユーザーに付与した場合、それらのユーザーは、そのスキーマ内にオブジェクトを作成できます。