

 从补丁 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/)。

# 创建架构
<a name="t_creating_schema"></a>

创建新数据库后，您可以在当前数据库中创建新 schema。*schema* 是包含命名数据库对象（例如表、视图和用户定义的函数 (UDF)）的命名空间。一个数据库可以包含一个或多个 schema，每个 schema 只属于一个数据库。两个 schema 可以具有共享相同名称的不同对象。

您可以在同一数据库中创建多个 schema，以便按照所需的方式组织数据，或对数据进行功能分组。例如，您可以创建一个 schema 来存储所有暂存数据，并创建另一个 schema 来存储所有报告表。您还可以创建不同的 schema 来存储与同一数据库中的不同业务组相关的数据。每个 schema 都可以存储不同的数据库对象，例如表、视图和用户定义的函数 (UDF)。此外，您还可以使用 AUTHORIZATION 子句创建 schema。此子句授予指定的用户所有权，或者设置指定的 schema 可以使用的最大磁盘空间量的配额。

Amazon Redshift 会为每个新的数据库自动创建一个名为 `public` 的架构。如果在创建数据库对象时未指定 schema 名称，则这些对象会进入 `public` schema。

要访问 schema 中的对象，请使用 `schema_name.table_name` 表示法限定对象名称。schema 的限定名称由以点分隔的 schema 名称和表名称组成。例如，您可能具有一个包含 `price` 表的 `sales` 模式，以及一个同样包含 `price` 表的 `inventory` schema。当您引用 `price` 表时，您必须将其限定为 `sales.price` 或者 `inventory.price`。

以下示例为用户 `GUEST` 创建了一个名为 **SALES** 的 schema。

```
CREATE SCHEMA SALES AUTHORIZATION GUEST;
```

有关更多命令选项的信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [CREATE SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_SCHEMA.html)。

要查看数据库中的 schema 列表，请运行以下命令。

```
select * from pg_namespace;
```

该输出值应该类似于以下内容。

```
  nspname             | nspowner |         nspacl
----------------------+----------+--------------------------
  sales               |  100     |
  pg_toast            |   1      |
  pg_internal         |   1      |
  catalog_history     |   1      |
  pg_temp_1           |   1      | 
  pg_catalog          |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
  public              |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
  information_schema  |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
```

有关如何查询目录表的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[查询目录表](https://docs.aws.amazon.com/redshift/latest/dg/c_join_PG.html)。

使用 GRANT 语句为用户授予 schema 的权限。

以下示例授予 `GUEST` 用户使用 SELECT 语句，在 `SALES` 架构中的所有表或视图中选择数据的权限。

```
GRANT SELECT ON ALL TABLES IN SCHEMA SALES TO GUEST;
```

以下示例一次性授予 `GUEST` 用户所有可用的权限。

```
GRANT ALL ON SCHEMA SALES TO GUEST;
```