Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Schemas

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

相同的数据库对象名称可以用在同一数据库的不同 schemas 中,没有冲突。例如,MY_SCHEMA 和 YOUR_SCHEMA 都可以包含名为 MYTABLE 的表。具有所需权限的用户可以访问数据库的多个 schemas 中的对象。

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

Schemas 可帮助解决多用户环境中的组织和并发问题,方式如下:

  • 允许多名开发人员使用同一数据库且互不干扰。

  • 将数据库对象组织到逻辑组以使其更易于管理。

  • 使应用程序能够将其对象放入到单独的 schemas 中,以使其对象名称不与其他应用程序所使用的对象名称冲突。

创建、修改和删除 Schemas

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

您可以执行以下操作:

  • 要创建 schema,请使用 CREATE SCHEMA 命令。

  • 要更改 schema 所有者,请使用 ALTER SCHEMA 命令。

  • 要删除 schema 及其对象,请使用 DROP SCHEMA 命令。

  • 要在 schema 内创建表,请以 schema_name.table_name 格式创建表。

要查看所有 Schemas 的列表,请查询 PG_NAMESPACE 系统目录表:

select * from pg_namespace;

要查看属于某 schema 的表列表,请查询 PG_TABLE_DEF 系统目录表。例如,以下查询会返回 PG_CATALOG schema 中的表列表。

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

搜索路径

搜索路径定义在 search_path 参数中,采用逗号分隔的 schema 名称列表形式。搜索路径指定在通过不包含 schemas 限定词的简单名称引用对象(例如,表或函数)时,搜索 schema 的顺序。

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

要更改当前会话的默认 schema,请使用 SET 命令。

有关更多信息,请参阅“配置引用”中的 search_path 描述。

基于 Schema 的权限

基于 Schema 的权限由 schema 的所有者确定:

  • 默认情况下,所有用户都对数据库的 PUBLIC schema 具有 CREATE 和 USAGE 权限。要禁止用户在数据库的 PUBLIC schema 中创建对象,请使用 REVOKE 命令删除该权限。

  • 除非对象所有者向用户授予了 USAGE 权限,否则用户无法访问其不拥有的 schemas 中的任何对象。

  • 如果已向用户授予对其他用户所创建的 schema 的 CREATE 权限,则这些用户可以在该 schema 中创建对象。