SPL 程序中的数据库对象可以通过其限定名称或非限定名称进行引用。限定名称采用 schema.name 形式,其中 schema 是其下存在标识符为 name 的数据库对象的 schema 的名称。非限定名称没有“schema.”部分。在引用限定名称时,对于所指的确切数据库对象,绝对不能有含糊不清之处 - 它存在或不存在于指定 schema 中。

不过,使用非限定名称查找对象需要使用当前用户的搜索路径。当用户成为会话的当前用户时,默认搜索路径始终与该用户相关联。搜索路径包含为查找非限定数据库对象引用而按从左到右的顺序搜索的 schemas 的列表。如果在搜索路径中的任何 schema 中都找不到对象,则将其视为不存在。在 PSQL 中,可以使用 SHOW search_path 命令显示默认搜索路径。

edb=# SHOW search_path;
   search_path
-----------------
 "$user", public
(1 row)

上面的搜索路径中的 $user 是指代当前用户的通用占位符,因此如果上面的会话的当前用户为 enterprisedb,将在以下 schema 中按以下顺序搜索非限定数据库对象 – 首先是 enterprisedb,然后是 public。

在搜索路径中解析非限定名称后,可以确定当前用户是否具有对该特定对象执行所需操作的适当特权。

说明 搜索路径的概念与 Oracle 数据库不兼容。对于非限定引用,Oracle 仅在当前用户的 schema 中查找指定的数据库对象。还请务必注意,在 Oracle 中,用户及其 schema 是相同实体,而在 POLARDB for Oracle 中,用户和 schema 是两个不同的对象。