search_path - Amazon Redshift

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)