更新时间:2026-02-06 GMT+08:00
分享

CREATE SCHEMA

功能描述

创建模式。

注意事项

  • 数据库中拥有CREATE权限的用户可以创建模式。
  • 系统管理员在普通用户同名Schema下创建的对象,所有者为Schema的同名用户(非系统管理员)。
  • 访问命名对象时可以使用模式名作为前缀进行具体访问,如果无模式名前缀,则访问当前模式下的命名对象。创建命名对象时也可用模式名作为前缀进行具体指定。
  • CREATE SCHEMA可以包括在新模式中创建对象的子命令,这些子命令和先进行创建模式再执行子命令的方式没有区别。如果使用了AUTHORIZATION子句,则所有创建的对象都将被该用户所拥有。

语法格式

  • 根据指定的名称创建模式。
    1
    2
    CREATE SCHEMA schema_name 
        [ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];
    

  • 根据用户名创建模式。
    1
    CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];
    

  • 创建模式并指定默认字符集和字符序。
    CREATE SCHEMA schema_name 
        [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ];

参数说明

  • schema_name

    模式名称。

    取值范围:字符串,要符合标识符命名规范

    模式新名称规则如下:

    • 新名称不能和当前数据库里其他的模式重名。
    • 新名称不能和当前数据库的初始用户重名。
    • 请勿使用“pg_”或“gs_role_”开头命名新名称。
  • AUTHORIZATION user_name

    指定模式的所有者。当不指定schema_name时(即根据用户名创建模式的方式),将user_name当作模式名,此时user_name只能是角色名。

    取值范围:已存在的用户名/角色名。

  • 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

    指定模式的默认字符集。

    取值范围:支持设置的字符集请参见表2

    • 未指定默认字符序时,模式的默认字符序为指定的字符集的默认字符序。
    • 仅在MYSQL兼容模式下(即sql_compatibility='MYSQL')支持该语法。
  • default_collation

    指定模式的默认字符序。

    取值范围:支持字符序请参见表2

    • 未指定默认字符集时,模式的默认字符集为指定的字符序对应的字符集。
    • 仅在MYSQL模式下(即sql_compatibility='MYSQL')支持该语法。

示例

 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
--创建一个角色role1。
gaussdb=# CREATE ROLE role1 IDENTIFIED BY '********';

--为用户role1创建一个同名schema,子命令创建的表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;

--创建角色role2。
gaussdb=# CREATE ROLE role2 IDENTIFIED BY '********';

--根据名称创建schema。
gaussdb=# CREATE SCHEMA schema1 AUTHORIZATION role2;
CREATE SCHEMA

--在进行防篡改属性修改前,需要对enable_ledger参数进行设置,enable_ledger参数默认为off,所以通过gs_guc来设置其为on。
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_ledger=on";

--设置完之后查看其参数状态为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 ledgernsp  CASCADE;

--删除用户。
gaussdb=# DROP USER role1 CASCADE;
gaussdb=# DROP USER role2 CASCADE;

相关链接

ALTER SCHEMADROP SCHEMA

相关文档