search_path - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

search_path

值 (粗體為預設值)

'$user', public, schema_names

以逗號分隔的現有結構描述名稱清單。如果有 '$user',清單會取代和 SESSION_USER 相同名稱的結構描述;如果沒有,則會忽略清單。如果有 public,且名為 public 的結構描述不存在,則會忽略清單。

描述

當以簡單名稱參考物件 (如資料表或函數) 且不提供結構描述元件時,指定搜尋結構描述的順序:

  • 外部結構描述和外部資料表不支援搜尋路徑。外部資料表必須以外部結構描述明確限定。

  • 建立物件時若沒有指定特定目標結構描述,系統會將物件置於搜尋路徑中列出的第一個結構描述。如果搜尋路徑是空的,系統會傳回錯誤。

  • 當其他結構描述中有同名的物件時,會使用搜尋路徑中先找到的那一個。

  • 物件若不在搜尋路徑中的任何結構描述中,則只能使用它的完整名稱 (指定包含它的結構描述) 來參考它。

  • 一定會搜尋系統目錄結構描述 pg_catalog。如果路徑中有它,會依指定順序搜尋。如果沒有,會先搜尋它再搜尋路徑中的項目。

  • 一定會搜尋目前工作階段的暫時資料表結構描述 pg_temp_nnn (如果存在)。可以使用 alias 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 添加到架構企業。

create table enterprise.frontier (c1 int);

當 PUBLIC.FRONTIER 資料表是在相同資料庫中建立,且使用者沒有在查詢中指定結構描述名稱,PUBLIC.FRONTIER 的優先順序會高於 ENTERP.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)