CREATE SCHEMA - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

CREATE SCHEMA

定义当前数据库的新 schema。

Syntax

CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ] [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]

Parameters

IF NOT EXISTS

这个子句指示,如果指定的 schema 已存在,则命令不应进行任何更改,并返回一条指示 schema 存在的消息,而不是以错误终止。

此子句在编写脚本时很有用,可使脚本在 CREATE SCHEMA 尝试创建已存在的 schema 时不会失败。

schema_name

新 schema 的名称。schema 名称不能为 PUBLIC。有关有效名称的更多信息,请参阅名称和标识符

注意

search_path 配置参数中的 schema 列表确定了在不使用 schema 名称的情况下引用同名对象的优先顺序。

AUTHORIZATION

一个向指定的用户提供所有权的子句。

username

schema 所有者的名称。

schema_element

要在 schema 中创建的一个或多个对象的定义。

QUOTA

指定的 schema 可以使用的最大磁盘空间量。此空间是整体磁盘使用情况。它包括所有永久表、指定 schema 下的具体化视图以及在每个计算节点上具有 ALL 分布的所有表的重复副本。schema 配额不考虑作为临时命名空间或 schema 的一部分创建的临时表。

要查看已配置的 schema 配额,请参阅SVV_SCHEMA_QUOTA_STATE

要查看已超出 schema 配额的记录,请参阅STL_SCHEMA_QUOTA_VIOLATIONS

Amazon Redshift 将选定值转换为 MB。如果您未指定值,则 GB 是默认的测量单位。

您必须是数据库超级用户才能设置和更改 schema 配额。不具有超级用户身份但具有 CREATE SCHEMA 权限的用户可以创建具有定义的配额的 schema。如果创建一个 schema 而不定义配额,则该 schema 具有无限的配额。如果将配额设置为低于 schema 所使用的当前值,则在您释放磁盘空间之前,Amazon Redshift 将不允许进一步摄入。DELETE 语句从表中删除数据,并且仅当 VACUUM 运行时才释放磁盘空间。

Amazon Redshift 会在提交事务之前检查每个事务是否存在违反配额的情况。Amazon Redshift 会根据设置的配额检查每个修改后的 schema 的大小(schema 中所有表使用的磁盘空间)。由于配额冲突检查是在事务结束时进行的,因此,大小限制可能会在事务被提交之前暂时超过事务配额。当事务超出配额时,Amazon Redshift 会停止事务,禁止后续提取,并恢复所有更改,直到您释放磁盘空间。由于后台 VACUUM 和内部清理,在停止事务后检查 schema 时,schema 可能不完整。

作为例外,Amazon Redshift 会忽略配额违规并在某些情况下提交事务。Amazon Redshift 会针对仅由以下一个或多个语句组成的事务执行此操作,而在同一事务中没有 INSERT 或 COPY 摄入语句:

  • DELETE

  • TRUNCATE

  • VACUUM

  • DROP TABLE

  • ALTER TABLE APPEND 仅在将数据从完整 schema 移至非完整 schema 时使用

UNLIMITED

Amazon Redshift 不对 schema 的总大小的增长施加任何限制。

Limits

Amazon Redshift 针对 schema 强制实施以下限制。

  • 每个数据库最多有 9900 个 schemas。

Examples

以下示例创建一个名为 US_SALES 的 schema 并向用户 DWUSER 授予所有权。

create schema us_sales authorization dwuser;

以下示例创建一个名为 US_SALES 的 schema,向用户 DWUSER 授予所有权,并将配额设置为 50 GB。

create schema us_sales authorization dwuser QUOTA 50 GB;

要查看新 schema,请查询 PG_NAMESPACE 目录表,如下所示。

select nspname as schema, usename as owner from pg_namespace, pg_user where pg_namespace.nspowner = pg_user.usesysid and pg_user.usename ='dwuser'; schema | owner ----------+---------- us_sales | dwuser (1 row)

以下示例创建 US_SALES schema,如果 schema 已存在,将不执行任何操作并返回一条消息。

create schema if not exists us_sales;