CREATE SCHEMA¶
CREATE SCHEMA语句用于在当前 Catalog 中创建 Schema。
Schema 是一种系统对象,用作图类型、图和过程等普通对象的容器。
当服务组初始化后,系统会自动创建/default_schema,其作为存储图的资源对象的默认 Schema。当会话启动时,该 Schema 会被自动设置为当前用户的主 Schema 并成为当前会话的 Schema。
创建 Schema 的用户会成为该 Schema 的 Owner,并隐式拥有USAGE。其他用户必须先获得USAGE,才能发现、切换到或访问该 Schema。更多信息,请参见 Schema 访问控制。
- 若要为当前用户更改主 Schema,可使用 ALTER USER。
- 若要为当前会话更改 Schema,可使用 SESSION SET。
前提条件¶
具备在当前 Catalog 执行CREATE SCHEMA操作的权限。更多信息,请参见角色与权限。
语法¶
- create_schema_statement
create_schema_statement ::=
'CREATE' 'SCHEMA' ('IF NOT EXISTS')? schema_reference
参数¶
IF NOT EXISTS¶
该子句会检查是否已经存在相同路径下的 Schema。如果已经存在,则不会创建 Schema,也不会抛出异常。
若不指定该子句,且相同路径下已存在 Schema,则会抛出异常。
schema_reference¶
所引用的 Schema 路径。此处即待创建的 Schema 的路径。
绝对路径或相对路径均可在语句中使用。
- 绝对路径必须以
/开头。例如,/test1和/test2/test3。 - 相对路径必须以
../开头。例如,../test1和../test2/test3。
当使用相对路径时,其对应的绝对路径是基于当前会话中设置的 Schema 来确定的。例如:
- 若当前会话的 Schema 设置为
/default_schema,其路径深度为 1:- 相对路径
../test1将解析为绝对路径/test1。 - 相对路径
../test2/test3将解析为绝对路径/test2/test3。
- 相对路径
- 若当前会话的 Schema 设置为
/my_test/test0,其路径深度为 2:- 相对路径
../test1将解析为绝对路径/my_test/test1。 - 相对路径
../test2/test3将解析为绝对路径/my_test/test2/test3。 - 相对路径
../../test4将解析为绝对路径/test4。
- 相对路径
在类 Unix 系统中,根目录(/)是最高级别的目录,无法再通过../向上遍历。因此,在解析相对路径时,任何会将路径移到根路径/之上的../都会被忽略。例如,若当前会话的 Schema 设置为/default_schema,其路径深度为 1,则相对路径../../test1和../../../test1等同于../test1,均解析为绝对路径/test1。
注意以下限制:
- 待创建的 Schema 路径不得与已有 Schema 的路径冲突。例如,若路径
/my_test下已存在 Schema,则不能在其子路径,比如/my_test/test1或/my_test/test1/test2,创建其他 Schema。 - 路径
/tmp_schema被系统保留,无法用于创建 Schema。
示例¶
使用绝对路径创建 Schema¶
CREATE SCHEMA IF NOT EXISTS /test/my_schema1
上述示例在路径/test/my_schema1中创建一个 Schema。
使用相对路径创建 Schema¶
'''
// 创建 Schema
CREATE SCHEMA IF NOT EXISTS /test/my_schema1
'''
'''
// 为当前会话设置 Schema
SESSION SET SCHEMA /test/my_schema1
'''
'''
// 使用相对路径创建 Schema
CREATE SCHEMA IF NOT EXISTS ../my_schema2
'''
上述示例在当前会话中的 Schema 为/test/my_schema1的情况下,在路径/test/my_schema2中创建一个 Schema。