

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# Schemas
<a name="r_Schemas_and_tables"></a>

数据库包含一个或多个命名 schemas。数据库中的每个 schema 包含表和其他类型的命名对象。默认情况下，数据库具有单个 schema（名为 PUBLIC）。您可以通过 schemas 使用公用名称分组数据库对象。架构类似于文件系统目录，但架构不能嵌套。

相同的数据库对象名称可以用在同一数据库的不同 schemas 中，没有冲突。例如，MY\$1SCHEMA 和 YOUR\$1SCHEMA 都可以包含名为 MYTABLE 的表。具有所需权限的用户可以访问数据库的多个 Schemas 中的对象。

默认情况下，在数据库搜索路径中的第一个 schema 内创建对象。有关信息，请参阅此部分后面的[搜索路径](#c_Search_path)。

Schema 可帮助解决多用户环境中的组织和并发问题，方式如下：
+ 让多名开发人员使用同一数据库且互不干扰。
+ 将数据库对象组织到逻辑组以使其更易于管理。
+ 使应用程序能够将其对象放入到单独的 schemas 中，以使其对象名称不与其他应用程序所使用的对象名称冲突。

## 搜索路径
<a name="c_Search_path"></a>

搜索路径定义在 search\$1path 参数中，采用逗号分隔的 schema 名称列表形式。搜索路径指定在通过不包含 schemas 限定词的简单名称引用对象（例如，表或函数）时，搜索 schema 的顺序。

如果创建了对象而未指定目标 schema，则将该对象添加到搜索路径中列出的第一个 schema。当不同 schemas 中存在同名的对象时，未指定 schema 的对象名称将引用搜索路径中包含具有该名称的对象的第一个 schema。

要更改当前会话的默认 schema，请使用 [SET](r_SET.md) 命令。

有关更多信息，请参阅“配置引用”中的 [search\$1path](r_search_path.md) 描述。

# 创建、修改和删除架构
<a name="r_Schemas_and_tables-creating-altering-and-deleting-schemas"></a>

任何用户都可以创建 schema 和修改或删除其拥有的 schema。

您可以执行以下操作：
+ 要创建 schema，请使用 [CREATE SCHEMA](r_CREATE_SCHEMA.md) 命令。
+ 要更改 schema 所有者，请使用 [ALTER SCHEMA](r_ALTER_SCHEMA.md) 命令。
+ 要删除 schema 及其对象，请使用 [DROP SCHEMA](r_DROP_SCHEMA.md) 命令。
+ 要在 schema 内创建表，请以 *schema\$1name.table\$1name* 格式创建表。

要查看所有 Schemas 的列表，请查询 PG\$1NAMESPACE 系统目录表：

```
select * from pg_namespace;
```

要查看属于某 schema 的表列表，请查询 PG\$1TABLE\$1DEF 系统目录表。例如，以下查询会返回 PG\$1CATALOG schema 中的表列表。

```
select distinct(tablename) from pg_table_def
where schemaname = 'pg_catalog';
```

# 基于 Schema 的权限
<a name="r_Schemas_and_tables-schema-based-privileges"></a>

 基于 Schema 的权限由 Schema 的拥有者确定：
+ 默认情况下，所有用户都对数据库的 PUBLIC Schema 具有 CREATE 和 USAGE 权限。要禁止用户在数据库的 PUBLIC Schema 中创建对象，请使用 [REVOKE](r_REVOKE.md) 命令删除该权限。
+ 除非对象拥有者向用户授予了 USAGE 权限，否则用户无法访问其不拥有的 Schemas 中的任何对象。
+ 如果已向用户授予对其他用户所创建的 Schema 的 CREATE 权限，则这些用户可以在该 Schema 中创建对象。