search_path - Amazon Redshift



Values (default in bold)

'$user', public, schema_names

既存のスキーマ名のカンマ区切りリスト。次の場合: '$user' が存在する場合は、 SESSION_USER が置き換えられます。そうでない場合は無視されます。次の場合: public が存在し、名前が のスキーマがありません public 存在するため、無視されます。


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

  • Search paths are not supported with external schemas and external tables. External tables must be explicitly qualified by an external schema.

  • When objects are created without a specific target schema, they are placed in the first schema listed in the search path. If the search path is empty, the system returns an error.

  • When objects with identical names exist in different schemas, the one found first in the search path is used.

  • An object that is not in any of the schemas in the search path can only be referenced by specifying its containing schema with a qualified (dotted) name.

  • The system catalog schema, pg_catalog, is always searched. If it is mentioned in the path, it is searched in the specified order. If not, it is searched before any of the path items.

  • The current session's temporary-table schema, pg_temp_nnn, is always searched if it exists. It can be explicitly listed in the path by using the alias pg_temp. If it is not listed in the path, it is searched first (even before pg_catalog). However, the temporary schema is only searched for relation names (tables, views). It is not searched for function names.


次の例は、スキーマ 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 (c1 int);

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

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