CREATE SCHEMA

定义架构。

语法

CREATE SCHEMA [ IF NOT EXISTS ] [database.]schema
   [ AUTHORIZATION username]
   [ DEFAULT { INCLUDE | EXCLUDE } [ SCHEMA ] PRIVILEGES ]
   [ DISK_QUOTA quota ]

参数

IF NOT EXISTS

如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。

IF NOT EXISTS 子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。

请参阅 ON_ERROR_STOP 了解相关信息。

数据库
要在其中创建架构的数据库的名称。如果指定,则必须是当前数据库。
架构
要创建的架构的名称,具有以下要求:
  • 在数据库的所有其他架构名称中必须是唯一的。

  • 必须符合关键字限制标识符 的规则。

  • 不能以 v_ 开头;此前缀是针对 Vertica 系统表保留的。

AUTHORIZATIONusername
仅对超级用户有效,用于将架构的所有权分配给其他用户。默认情况下,还会为创建架构的用户分配所有权。

创建架构后,可以使用 ALTER SCHEMA 将所有权重新分配给其他用户。

DEFAULT {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES

指定是否启用或禁用指定架构中新表的默认权限继承:

  • EXCLUDE SCHEMA PRIVILEGES (默认值):禁用架构的权限继承。

  • INCLUDE SCHEMA PRIVILEGES:指定为指定架构中的表授予的权限与为架构授予的权限相同。此选项对架构中的现有表没有影响。

如果忽略 INCLUDE PRIVILEGES,则必须显式授予所需表的架构权限。

有关详细信息,请参阅启用架构继承

DISK_QUOTA配额
字符串,一个整数,后跟支持的单位:K、M、G 或 T。导致架构的使用率超出设置的配额的数据加载、DML 和 ILM 操作失败。有关详细信息,请参阅磁盘配额

如果未指定,则架构没有配额。

特权

支持的子语句

CREATE SCHEMA 可以包含一个或多个子语句,例如,在新架构中创建表或投影。支持的子语句包括:

CREATE SCHEMA 语句和所有子语句均被视为单个事务。如果任何语句失败,Vertica 将回退整个事务。将为新架构的所有者分配在此事务中创建的所有对象的所有权。

例如,以下 CREATE SCHEMA 语句还将授予对新架构的权限,并创建一个表和该表的视图:

=> \c - Joan
You are now connected as user "Joan".
=> CREATE SCHEMA s1
     GRANT USAGE, CREATE ON SCHEMA s1 TO public
     CREATE TABLE s1.t1 (a varchar)
     CREATE VIEW s1.t1v AS SELECT * FROM s1.t1;
CREATE SCHEMA
=> \dtv s1.*
             List of tables
 Schema | Name | Kind  | Owner | Comment
--------+------+-------+-------+---------
 s1     | t1   | table | Joan  |
 s1     | t1v  | view  | Joan  |
(2 rows)

示例

创建架构 s1

=> CREATE SCHEMA s1;

如果架构 s2 尚未存在,则创建此架构:

=> CREATE SCHEMA IF NOT EXISTS s2;

如果此架构已存在,Vertica 将返回回退消息:

=> CREATE SCHEMA IF NOT EXISTS s2;
NOTICE 4214:  Object "s2" already exists; nothing was done

在架构 s1 中创建表 t1,然后授予用户 FredAniket 对所有现有表的访问权限以及对表 t1 的所有权限:


=> CREATE TABLE s1.t1 (c INT);
CREATE TABLE
=> GRANT USAGE ON SCHEMA s1 TO Fred, Aniket;
GRANT PRIVILEGE
=> GRANT ALL PRIVILEGES ON TABLE s1.t1 TO Fred, Aniket;
GRANT PRIVILEGE

启用新架构 s3 上的继承,以便在其中创建的所有表都会自动继承其权限。在这种情况下,新表 s3.t2 将继承 USAGE、CREATE 和 SELECT 权限,这些权限会自动授予所有数据库用户: => CREATE SCHEMA s3 DEFAULT INCLUDE SCHEMA PRIVILEGES; CREATE SCHEMA => GRANT USAGE, CREATE, SELECT, INSERT ON SCHEMA S3 TO PUBLIC; GRANT PRIVILEGE => CREATE TABLE s3.t2(i int); WARNING 6978: 表“t2”将包括架构“s3”的 CREATE TABLE 权限

另请参阅