更新时间:2026-10-21 GMT+08:00
分享

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 [ ... ] ];
    

  • 根据用户名创建模式
    1
    CREATE 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;

相关链接

ALTER SCHEMA,DROP SCHEMA

相关文档