値 (デフォルトは太字)
'$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)