タイプ: | string |
デフォルト: | "$user", public |
コンテキスト: | user |
再起動: | false |
この変数は、オブジェクト(テーブル、データ型、関数など)がスキーマを指定されていない単純な名前で参照されている場合に、スキーマを検索する順番を指定します。 異なるスキーマに同じ名前のオブジェクトがある場合、検索パスで最初に見つかったものが使用されます。 検索パス内のどのスキーマにも存在しないオブジェクトを参照するには、修飾名(ドット付き)でそのオブジェクトが含まれるスキーマを指定する必要があります。
search_path
の値は、スキーマの名前をカンマで区切った一覧でなければなりません。 存在していないスキーマ、またはユーザがUSAGE
権限を所有していないスキーマは警告なしに無視されます。
もしそのようなスキーマが存在し、ユーザがそれにたいしてUSAGE
権限を所有している場合、一覧内の項目の1つが特別な名前である$user
の場合、CURRENT_USERと同じ名前を持つスキーマがあれば、そのスキーマが置換されます。(このような名前空間がない場合は$user
は無視されます。)
システムカタログのスキーマであるpg_catalog
は、パスでの指定の有無にかかわらず、常に検索されます。パスで指定されている場合は、指定された順序で検索されます。pg_catalog
がパスに含まれていない場合、パスに含まれる項目を検索する前に検索が行われます
同様に、現在のセッションの一時テーブルスキーマpg_temp_nnn
も、存在すれば常に検索されます。これはpg_temp
pg_tempという別名を使用してパスに明示的に列挙させることができます。パスに列挙されていない場合、最初に(pg_catalog
よりも前であっても)検索されます。しかし、一時スキーマはリレーション(テーブル、ビュー、シーケンスなど)とデータ型名に対してのみ検索されます。関数や演算子名に対してはまったく検索されません。
対象となる特定のスキーマを指定せずにオブジェクトが作成された場合、それらのオブジェクトはsearch_path
で名前を付けられた最初に有効となっているスキーマに配置されます。検索パスが空の場合、エラーが報告されます。
このパラメータのデフォルト値は"$user", public
です。この設定はデータベースの共有(どのユーザも非公開のスキーマを持たず、全員がpublic
を共有)、ユーザごとの非公開のスキーマ、およびこれらの組み合わせがサポートします。デフォルトの検索パスの設定を全体的またはユーザごとに変更することで、その他の効果を得ることもできます。
スキーマの扱いについての詳細は、ddl-schemasをご覧ください。とりわけ、デフォルトの設定はデータベースのユーザが、一人あるいはお互いに信頼できる少数のユーザだけである場合にのみ適切です。
SQL関数のcurrent_schemas によって、検索パスの現在の有効な値を調べることができます(functions-infoを参照してください)。これは、search_path
の値を調べるのとは異なります。current_schemasは、search_path
に現れる項目がどのように解決されたかを表すからです。