search_path - Amazon Redshift

search_path

値 (デフォルトは太字)

'$user', public, schema_names

既存のスキーマ名のカンマ区切りリスト。'$user' が存在する場合は、SESSION_USERと同じ名前を持つスキーマが置き換えられ、それ以外の場合は無視されます。

説明

オブジェクト (テーブルや関数など) がスキーマコンポーネントなしの簡潔な名前で参照されたときにスキーマを検索する順序を指定します。

  • 検索パスは外部スキーマと外部テーブルでサポートされていません。外部テーブルは、外部スキーマによって明示的に修飾される必要があります。

  • 特定のターゲットスキーマなしで作成されたオブジェクトは、検索パスにリストされている最初のスキーマに配置されます。検索パスが空の場合、システムはエラーを返します。

  • 異なるスキーマに同じ名前のオブジェクトが存在する場合は、検索パスで最初に見つかったものが使用されます。

  • 検索パスのどのスキーマにも存在しないオブジェクトは、それを含むスキーマを修飾 (ドット区切り) 名で指定することによってのみ参照できます。

  • システムカタログスキーマ pg_catalog は常に検索されます。パスで記述されている場合は、指定されている順序で検索されます。記述されていない場合は、すべてのパス項目の前に検索されます。

  • 現在のセッションの一時テーブルスキーマ pg_temp_nnn は、存在する場合は常に検索されます。エイリアス pg_temp を使用して、パスで明示的に指定できます。パスで指定されていない場合は、最初に検索されます (pg_catalog よりさらに前)。ただし、一時スキーマでは関係名 (テーブル、ビュー) だけが検索されます。関数名は検索されません。

次の例は、スキーマ ENTERPRISE を作成し、search_path を新しいスキーマに設定します。

create schema enterprise; set search_path to enterprise; show search_path; search_path ------------- enterprise (1 row)

次の例は、スキーマ ENTERPRISE をデフォルトの search_path に追加します。

set search_path to '$user', public, enterprise; show search_path; search_path ----------------------------- "$user", public, enterprise (1 row)

次の例では、テーブル FRONTIER をスキーマ ENTERPRISE に追加します。

create table enterprise.frontier (c1 int);

テーブル PUBLIC.FRONTIER が同じデータベース内で作成され、ユーザーがクエリでスキーマ名を指定しない場合は、PUBLIC.FRONTIER が ENTERPRISE.FRONTIER より優先されます。

create table public.frontier(c1 int); insert into enterprise.frontier values(1); select * from frontier; frontier ---- (0 rows) select * from enterprise.frontier; c1 ---- 1 (1 row)