CREATE SCHEMA
功能描述
创建模式。
注意事项
- 数据库中拥有CREATE权限的用户可以创建模式。
- 系统管理员在普通用户同名的Schema下创建的对象,其所有者为Schema的同名用户(非系统管理员)。
- 访问命名对象时可以使用模式名作为前缀进行具体访问,如果无模式名前缀,则访问当前模式下的命名对象。创建命名对象时也可用模式名作为前缀进行具体指定。
- CREATE SCHEMA可以包括在新模式中创建对象的子命令,这种子命令和先进行创建模式再执行子命令的方式没有区别。如果使用了AUTHORIZATION子句,则所有创建的对象都将被该用户所拥有。
语法格式
- 根据指定模式名称创建模式
1 2
CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [SET NODE GROUP group_name] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];

- 根据用户名创建模式
1CREATE SCHEMA AUTHORIZATION user_name [SET NODE GROUP group_name] [ schema_element [ ... ] ];

- 创建模式并指定默认字符集和字符序
CREATE SCHEMA schema_name [SET NODE GROUP group_name] [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ];
参数说明
- schema_name
模式名称。
取值范围:字符串,要符合标识符命名规范。
模式新名称规则如下:
- 新名称不能和当前数据库里其他的模式重名。
- 新名称不能和当前数据库的初始用户重名。
- 请勿使用“pg_”或“gs_role_”开头或“data_redis”命名新名称。
- AUTHORIZATION user_name
指定模式的所有者。当不指定schema_name时(即根据用户名创建模式的方式),将user_name作为模式名,此时user_name只能是角色名。
取值范围:已存在的用户名/角色名。
- SET NODE GROUP group_name
设置模式的单节点属性。group_name表示单节点组Node Group名称,仅支持设置系统预定的类型为's'的单节点组Node Group,其名称前缀为“sys_single_group”。
- 在M-Compatibility模式数据库下(即sql_compatibility = 'M')不支持该语法。
- CREATE SCHEMA语法包含CREATE TABLE子句的复合SQL语句不支持单节点表相关功能,既不支持单节点表创建,也不支持模式设置单节点表属性。
- WITH BLOCKCHAIN
指定模式的防篡改属性。
- 将普通模式修改为防篡改模式,需将GUC参数enable_ledger设置为on。该参数默认值为off,级别为SIGHUP。
- 防篡改模式下的行存普通用户表将自动扩展为防篡改用户表。
- schema_element
在模式里创建对象的SQL语句。
当前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE TABLE PARTITION、CREATE SEQUENCE、CREATE TRIGGER以及GRANT子句。
- schema_element所创建的对象都被AUTHORIZATION user_name子句指定的user_name所拥有。
- 如果当前搜索路径内的模式存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW search_path查看当前搜索路径上的模式。
- default_charset
指定模式的默认字符集。未指定该选项时,模式的默认字符集为指定的字符序COLLATE的默认字符集。
取值范围:支持设置的字符集请参见表1。
仅在MYSQL模式数据库或M-Compatibility模式数据库下(即sql_compatibility = 'MYSQL'或sql_compatibility = 'M')支持该语法。以上行为是在sql_compatibility = 'MYSQL'时的表现,sql_compatibility = 'M'的行为请参见《M-Compatibility开发指南》中“SQL参考 > SQL语法 > SQL语句 > C > CREATE SCHEMA”的内容。
- default_collation
指定模式的默认字符序。未指定该选项时,模式的默认字符序为指定的字符集CHARSET的默认字符序。
取值范围:支持设置的字符集请参见表1。
仅在MYSQL模式数据库或M-Compatibility模式数据库下(即sql_compatibility = 'MYSQL'或sql_compatibility = 'M')支持该语法。以上行为是在sql_compatibility = 'MYSQL'时的表现,sql_compatibility = 'M'的行为请参见《M-Compatibility开发指南》中“SQL参考 > SQL语法 > SQL语句 > C > CREATE SCHEMA”的内容。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | --创建一个角色role1。 gaussdb=# CREATE ROLE role1 IDENTIFIED BY '********'; CREATE ROLE --为用户role1创建一个同名Schema,schema_element子命令创建的表films和winners的拥有者为role1。 gaussdb=# CREATE SCHEMA AUTHORIZATION role1 CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL; CREATE SCHEMA --创建新角色role2。 gaussdb=# CREATE ROLE role2 IDENTIFIED BY '********'; CREATE ROLE --根据名称创建schema1并指定所有者role2。 gaussdb=# CREATE SCHEMA schema1 AUTHORIZATION role2; CREATE SCHEMA --根据名称创建schema2并显示设置单节点表属性。 gaussdb=# CREATE SCHEMA schema2 SET NODE GROUP sys_single_group1; CREATE SCHEMA --修改防篡改属性。 --防篡改属性修改前,需要将GUC参数enable_ledger设置为on,enable_ledger默认为off,需要通过gs_guc进行设置。 gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_ledger=on"; --设置完成后,查看enable_ledger状态是否为on。 gaussdb=# SHOW enable_ledger; enable_ledger --------------- on (1 row) --创建Schema并指定防篡改属性。 gaussdb=# CREATE SCHEMA ledgernsp WITH BLOCKCHAIN; CREATE SCHEMA --删除Schema。 gaussdb=# DROP SCHEMA role1 CASCADE; gaussdb=# DROP SCHEMA schema1 CASCADE; gaussdb=# DROP SCHEMA schema2 CASCADE; gaussdb=# DROP SCHEMA ledgernsp CASCADE; --删除用户。 gaussdb=# DROP USER role1 CASCADE; gaussdb=# DROP USER role2 CASCADE; |