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 了解相关信息。
- 数据库
- 要在其中创建架构的数据库的名称。如果指定,则必须是当前数据库。
- 架构
- 要创建的架构的名称,具有以下要求:
AUTHORIZATION
username- 仅对超级用户有效,用于将架构的所有权分配给其他用户。默认情况下,还会为创建架构的用户分配所有权。
创建架构后,可以使用
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 TABLE / CREATE TEMPORARY TABLE
- GRANT 语句
-
CREATE PROJECTION
-
CREATE SEQUENCE
-
CREATE TEXT INDEX
-
CREATE VIEW
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
,然后授予用户 Fred
和 Aniket
对所有现有表的访问权限以及对表 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 权限