search_path
值(默认为粗体)
'$user'、public、schema_names
现有 schema 名称的逗号分隔的列表。如果 '$user' 存在,则将替换与 SESSION_USER
同名的 schema,否则它将被忽略。
描述
指定不带 schema 组件的简单名称引用对象(例如表或函数)时搜索 schema 的顺序。
-
外部 schema 和外部表不支持搜索路径。外部表必须通过一个外部 schema 明确地进行限定。
-
如果在没有特定目标 schema 的情况下创建对象,则对象将被置于搜索路径中列出的第一个 schema 中。如果搜索路径为空,系统将返回错误。
-
如果不同的 schema 中存在具有相同名称的对象,则使用搜索路径中找到的第一个对象。
-
仅可通过使用合格的(用点分隔)名称指定其包含 schema 来引用未存在于搜索路径的任何 schema 中的对象。
-
将始终搜索系统目录 schema pg_catalog。如果路径中提到了该 schema,则将按指定顺序搜索该 schema。否则,将在任何路径项目之前搜索该 schema。
-
如果存在当前会话的临时表 schema pg_temp_nnn,则将始终搜索该 schema。可使用别名 pg_temp 在路径中明确列出该 schema。如果未在路径中列出该 schema,则将首先搜索该 schema(甚至在 pg_catalog 之前)。但是,仅在临时 schema 中搜索关系名称(表、视图)。不在临时 schema 中搜索函数名称。
示例
以下示例将创建 schema ENTERPRISE 并设置到新 schema 的 search_path。
create schema enterprise; set search_path to enterprise; show search_path; search_path ------------- enterprise (1 row)
以下示例将 schema ENTERPRISE 添加到默认 search_path。
set search_path to '$user', public, enterprise; show search_path; search_path ----------------------------- "$user", public, enterprise (1 row)
以下示例将表 FRONTIER 添加到 schema ENTERPRISE。
create table enterprise.frontier (c1 int);
如果在相同的数据库中创建表 PUBLIC.FRONTIER,并且用户未在查询中指定 schema 名称,则 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)