更新时间:2026-10-21 GMT+08:00
ALTER SCHEMA
功能描述
修改模式属性。包括:修改模式的名称、所有者以及模式的防篡改属性等。
注意事项
- 只有模式的所有者和被授予了模式ALTER权限的用户,在拥有当前数据库CREATE权限的情况下,才可以执行ALTER SCHEMA命令。三权分立开关关闭时,系统管理员默认拥有此权限。
- 修改模式的所有者,当前用户必须是该模式的所有者或者系统管理员,且该用户是新所有者角色的成员。
- 仅初始用户可以修改除PUBLIC以外的系统模式(如:pg_catalog、sys等)的所有者。修改系统自带模式的名称可能会导致部分功能不可用,甚至影响数据库正常运行,默认情况下不允许修改系统自带模式的名称。出于前向兼容性问题考虑,仅允许当系统在启动或升级过程中或参数allow_system_table_mods为on时可修改系统自带模式的名称。
- 除初始用户外,其他用户无法将模式的所有者修改为运维管理员。
语法格式
- 修改模式的防篡改属性
1ALTER SCHEMA schema_name { WITH | WITHOUT } BLOCKCHAIN;

- 修改模式的名称
1 2
ALTER SCHEMA schema_name RENAME TO new_name;

- 修改模式的所有者
1 2
ALTER SCHEMA schema_name OWNER TO new_owner;

- 修改模式的默认字符集和字符序
ALTER SCHEMA schema_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ];
- 修改模式的单节点属性
ALTER SCHEMA schema_name [ SET NODE GROUP group_name | DROP NODE GROUP ];
参数说明
- schema_name
现有模式的名称。
取值范围:已存在的模式名。
- RENAME TO new_name
修改模式的名称。new_name表示模式的新名称。
取值范围:字符串,要符合标识符命名规范。
模式新名称规则如下:
- 新名称不能和当前数据库里其他的模式重名。
- 新名称不能和当前数据库的初始用户重名。
- 请勿使用“pg_”或“gs_role_”开头或“data_redis”命名新名称。
- OWNER TO new_owner
修改模式的所有者。new_owner表示模式的新所有者。
取值范围:已存在的用户名或角色名。
如果非系统管理员需要改变模式的所有者,则该用户还必须是新的所有角色的直接或间接成员,并且该成员必须在此数据库上有CREATE权限。
- { WITH | WITHOUT } BLOCKCHAIN
修改模式的防篡改属性。WITH BLOCKCHAIN表示防篡改模式。
- 将普通模式修改为防篡改模式,需将GUC参数enable_ledger设置为on。该参数默认值为off,级别为SIGHUP。
- 具有防篡改属性模式下的普通行存表均为防篡改历史表,不包括外表、临时表以及系统表。
- 仅当模式下不包含任何表时,才可以对模式的防篡改属性进行修改或切换。
- 不支持对临时表模式、toast表模式、dbe_perf模式或blockchain模式修改防篡改属性。
- default_charset
修改模式的默认字符集。
取值范围:支持设置的字符集请参见表1。
- 仅在MYSQL模式数据库或M-Compatibility模式数据库下(即sql_compatibility = 'MYSQL'或sql_compatibility = 'M')支持该语法。以上行为是在sql_compatibility = 'MYSQL'时的表现,sql_compatibility = 'M'的行为请参见《M-Compatibility开发指南》中“SQL参考 > SQL语法 > SQL语句 > A > ALTER SCHEMA”的内容。
- 未指定默认字符序时,模式的默认字符序为指定的字符集的默认字符序。
- default_collate
修改模式的默认字符序。
取值范围:支持设置的字符序请参见表1。
- 仅在MYSQL模式数据库或M-Compatibility模式数据库下(即sql_compatibility = 'MYSQL'或sql_compatibility = 'M')支持该语法。以上行为是在sql_compatibility = 'MYSQL'时的表现,sql_compatibility = 'M'的行为请参见《M-Compatibility开发指南》中“SQL参考 > SQL语法 > SQL语句 > A > ALTER SCHEMA”的内容。
- 未指定默认字符集时,模式的默认字符集为指定的字符序对应的字符集。
- SET NODE GROUP group_name | DROP NODE GROUP
- SET NODE GROUP group_name:表示设置模式的单节点属性。group_name表示单节点组Node Group名称,仅支持设置系统预定的类型为's'的单节点组Node Group。
- DROP NODE GROUP:表示删除模式的单节点属性。
在M-Compatibility模式数据库下(即sql_compatibility = 'M')不支持该语法。
示例
- 修改模式的防篡改属性
--创建模式test_schema1。 gaussdb=# CREATE SCHEMA test_schema1; --修改模式test_schema1为防篡改模式。 gaussdb=# ALTER SCHEMA test_schema1 WITH BLOCKCHAIN; --查询模式信息,防篡改属性为true。 gaussdb=# \dn+ test_schema1 List of schemas Name | Owner | Access privileges | Description | WithBlockChain --------------+-------+-------------------+-------------+---------------- test_schema1 | omm | | | t (1 row)
- 修改模式名称
--将模式test_schema1重命名为test_sch1。 gaussdb=# ALTER SCHEMA test_schema1 RENAME TO test_sch1; --查询模式信息。 gaussdb=# \dn+ test* List of schemas Name | Owner | Access privileges | Description | WithBlockChain -----------+-------+-------------------+-------------+---------------- test_sch1 | omm | | | t (1 row)
- 修改模式所有者
--创建用户test_user。 gaussdb=# CREATE ROLE test_user PASSWORD '********'; --将模式test_sch1的所有者修改为test_user。 gaussdb=# ALTER SCHEMA test_sch1 OWNER TO test_user; --查询模式信息。 gaussdb=# \dn+ test_sch1; List of schemas Name | Owner | Access privileges | Description | WithBlockChain -----------+-----------+-------------------+-------------+---------------- test_sch1 | test_user | | | t (1 row) --删除新建的模式和用户。 gaussdb=# DROP SCHEMA test_sch1; gaussdb=# DROP ROLE test_user;
- 修改默认字符集和默认字符序
除binary字符集和字符序外,当前仅支持指定与数据库编码相同的字符集。
--创建并切换至测试数据库。 gaussdb=# CREATE DATABASE test1 WITH DBCOMPATIBILITY = 'MYSQL' ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.utf8' LC_CTYPE = 'zh_CN.utf8'; gaussdb=# \c test1 --创建模式test_sch2。 test1=# CREATE SCHEMA test_sch2; --修改其默认字符集为utf8mb4,默认字符序修改为utf8mb4_bin。 test1=# ALTER SCHEMA test_sch2 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; --删除新建的模式。 test1=# DROP SCHEMA test_sch2; --切换至默认数据库(根据实际情况修改数据库名),并删除新建的数据库。 test1=# \c postgres gaussdb=# DROP DATABASE test1;
- 修改模式的单节点属性。
--创建模式test_schema1。 gaussdb=# CREATE SCHEMA test_schema1; --修改设置模式test_schema1单节点属性。 gaussdb=# ALTER SCHEMA test_schema1 SET NODE GROUP sys_single_group1; --查询模式test_schema1单节点属性,pg_namespace系统表的nspgroupoid记录单节点属性对应node group的oid。 gaussdb=# SELECT * FROM pg_namespace WHERE nspname='test_schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid --------------+----------+-------------+--------+-------------------+---------------+--------------+------------- test_schema1 | 10 | 0 | | n | f | | 16389 (1 row) --删除模式test_schema1单节点属性。 gaussdb=# ALTER SCHEMA test_schema1 DROP NODE GROUP; --查询模式test_schema1单节点属性。 gaussdb=# SELECT * FROM pg_namespace WHERE nspname='test_schema1'; nspname | nspowner | nsptimeline | nspacl | in_redistribution | nspblockchain | nspcollation | nspgroupoid --------------+----------+-------------+--------+-------------------+---------------+--------------+------------- test_schema1 | 10 | 0 | | n | f | | (1 row)
相关链接
父主题: A