更新时间:2025-06-04 GMT+08:00

GaussDB M兼容模式

当使用MySQL的M兼容模式,可以设置GUC参数提高GaussDB的兼容性,迁移涉及的GUC参数和影响范围可参见表1

GaussDB数据库提供了许多运行参数,配置这些参数可以影响数据库系统的行为。在修改这些参数时请确保用户理解了这些参数对数据库的影响,否则可能会导致无法预料的结果。

表1 GaussDB(M兼容模式)的GUC参数

兼容M行为配置项(仅限集中式)

兼容性配置项

兼容性配置项名字

支持的数据库

是否建议打开

m_format_behavior_compat_options

enable_escape_string

转义符控制开关。

不设置此配置项时,转义符行为受GaussDB转义符相关的GUC参数standard_conforming_strings、escape_string_warning和backslash_quote控制。

设置此配置项时,默认支持除'\0'外的所有MySQL转义符,且gsql客户端中'\b', '\r'和'\Z'回显行为会发生改变,与MySQL客户端保持一致。

GaussDB V2.0-8.200 集中式开始的版本

enable_conflict_funcs

冲突函数控制开关。

不设置此配置项时,ceil、format、instr、position、row_number、rank、dense_rank、regexp_instr、regexp_like、regexp_replace及regexp_substr函数保持GaussDB原生系统函数行为。

设置此配置项,且参数m_format_dev_version值为's2'或以上版本时,ceil、format、instr、position、row_number、rank及dense_rank函数为M-Compatibility兼容模式数据局库实现行为。使用regexp_instr、regexp_like、regexp_replace及regexp_substr函数时会报错,提示M-Compatibility兼容模式数据库不支持。

GaussDB V2.0-8.200 集中式开始的版本

select_column_name

列名回显控制开关。目前只有M兼容模式下支持,在B模式下是不支持的。需要设置m_format_behavior_compat_options ='select_column_name',特性开关为用户级,缺省关闭。

不设置此配置项时:

SELECT 系统函数:回显为系统函数名。

SELECT 表达式:回显为?column?。

SELECT 布尔值:回显为bool。

设置此配置项时,列名回显为全部的函数或表达式输入。

仅支持集中式,使用商用客户端测试。

如果显示的列名字符串中含有转义字符,只有在设置了m_format_behavior_compat_options ='enable_escape_string';后才会显示转义后的字符,否则会显示转义字符本身。比如SELECT"abc\tdef";M兼容在未开启上述设置时显示为abc\tdef。

GaussDB V2.0-8.200 集中式开始的版本

enable_precision_decimal

支持数据类型精度。

不设置此配置项时:

CREATE TABLE SELECT语句只支持SELECT表的列,不支持表达式、函数、常量,以及union场景(因为涉及结果类型推导)。

设置此配置项时:

CREATE TABLE SELECT语句不受限制上面描述的场景限制。

GaussDB V2.0-8.200 集中式开始的版本

forbid_none_space_comment

支持“-- ”单行注释语法。

不设置此配置项时:--后的内容(--后无论是否添加空格,--后的全部内容)全部被视为单行注释内容。

设置此配置项时:仅-- 后的内容(--后添加空格,空格之后的内容)将被视为单行注释内容。

GaussDB V2.0-9.0 集中式/分布式

cast_as_new_json

支持JSON类型执行::JSON转换时转换为M-Compatibility模式数据库的JSON类型。

不设置此配置项时:执行::JSON、CREATE TABLE <tablename> AS <包含JSON类型的SELECT查询>; 等涉及使用::JSON方式进行JSON类型转换的场景,实际转换为非M-Compatibility模式数据库(即GaussDB原有)的JSON类型。

设置此配置项时:执行::JSON、CREATE TABLE <tablename> AS <包含JSON类型的SELECT查询>; 等涉及使用::JSON方式进行JSON类型转换的场景,实际转换为M-Compatibility模式数据库JSON类型。

GaussDB V2.0-9.0 集中式

grant_database_nomapping

M-Compatibility模式数据库下grant|revoke on database语法行为配置项。

不设置此配置项时:GRANT | REVOKE ON DATABASE语法映射成GRANT | REVOKE ON SCHEMA行为,赋予或回收指定的用户或角色对模式层级对象的访问权限。

设置此配置项时:GRANT | REVOKE ON DATABASE语法保留GaussDB数据库默认兼容性库中GRANT | REVOKE ON DATABASE语法的行为,赋予或回收指定的用户或角色对数据库层级对象的访问权限。

GaussDB V2.0-9.0 集中式/分布式

disable_illegal_function_syntax

用于控制系统函数中不合法的语法功能。

不设置此项时,以下场景的系统函数语法功能正常可用。

无入参的系统函数支持参数为(*)的调用。

普通系统函数支持结合WITHIN GROUP使用。

普通系统函数入参支持结合ORDER BY使用。

普通系统函数支持结合OVER子句使用。

聚合函数支持结合WITHIN GROUP使用。

设置此项时,上述场景将被禁用。

GaussDB V2.0-9.0 集中式

m_format_dev_version

S1

影响如下语法:

禁用SELECT FETCH FIRST ROWS ONLY语法。

禁用TRUNCATE CASCADE/RESTRICT语法。

禁用CREATE TABLE中定义主键时指定USING INDEX TABLESPACE tablespace_name语法。

DROP TABLE/VIEW/COLUMN中CASCADE/RESTRICT语法语义改变,改为忽略CASCADE/RESTRICT的语义,且默认行为为RESTRICT。

CREATE TABLE REFERENCES作为列约束时,语法语义改变,改为忽略该外键定义。

GaussDB V2.0-8.100 集中式/分布式

s2

影响如下操作符:

::操作符的转换规则变更为默认隐式转换规则。

影响如下视图:

information_schema.statistics视图内INDEX_NAME字段在主键场景由显示primary改为显示PRIMARY;COLUMN_NAME和SUB_PART字段补充了前缀索引场景的支持;临时表索引由显示改为不显示;系统列的索引由部分场景可能会显示改为不显示。

information_schema.global_variables视图内数据由显示pg_settings表里面所有数据缩小为pg_settings表里context字段是“internal”、“postmaster”、“backend”、“sighup”数据。

information_schema.columns视图内COLUMN_KEY字段补充了前缀索引场景的支持。

information_schema.table_constraints视图内CONSTRAINT_NAME字段在主键约束场景由显示约束名改为显示PRIMARY。

information_schema.character_sets视图可以查询所有可用字符集信息。

information_schema.collations视图可以查询所有可用字符排序规则信息。

information_schema.collation_character_set_applicability视图可以查询所有可用排序规则和字符集的对应关系。

information_schema.character_sets、information_schema.collations、information_schema.collation_character_set_applicability视图中的CHARACTER_SET_NAME改成小写,查询显示根据字符序细分utf8mb4和utf8。

影响如下语法:

以下事务语法语义改变,改为设置下一个事务特性:

set @@transaction_isolation = value

set @@transaction_read_only = value

set transaction isolation level

set transaction {read write | read only}

set transaction 语法语义改变,改为设置会话级事务特性:

set [local|session|@@session.] transaction_isolation = value

set [local|session|@@session.] transaction_read_only = value

show transaction_isolation显示为带中划线的隔离级别。

创建生成列不指定STORED和VIRTUAL关键字,默认创建虚拟生成列。

SHOW CREATE TABLE语法返回结果集变更,包括:

列/表注释位置变更,从以COMMENT ON语句形式返回改为在CREATE TABLE语句以COMMENT子句形式中返回;

主键与唯一约束位置变更,从以ALTER TABLE ADD CONSTRAINT语句形式返回改为在CREATE TABLE语句以CONSTRAINT子句形式作为表约束中返回;

主键与唯一约束中的USING INDEX TABLESPACE选项不再显示,该选项在设置兼容版本控制开关为s1后被禁用;

索引注释位置变更,从以COMMENT ON语句形式返回改为在CREATE INDEX语句以COMMENT子句形式返回;

全局临时表ON COMMIT选项位置变更,从以CREATE TABLE语句WITH子句中on_commit_delete_rows参数形式返回改为在CREATE TABLE语句以ON COMMIT子句形式返回。

SHOW CHARACTER SET语法查询使用视图information_schema.character_sets,查询结果随该视图内容的变化而变化。

SHOW COLLATION语法查询使用视图information_schema.collations,查询结果随该视图内容的变化而变化。

UPDATE语法中:

如果table_name指定了别名,则只能通过别名引用此表。

仅在单表场景多个字段下,各字段的表达式计算会按从左到右的顺序;如果有引用前面的字段名,则使用其更新后的数据,且同一字段名可被修改多次。

INSERT ... ON DUPLICATE KEY UPDATE语法中:ON DUPLICATE KEY UPDATE子句更新多列时,如果有引用前面的字段名,则使用其更新后的数据,且同一字段名可被修改多次。

影响以下GUC参数:

增加transaction_isolation的参数范围。

影响如下功能:

删除生成列的基列需要先删除对应的生成列。

存储生成列的基列不支持指定SET NULL、SET DEFAULT、CASCADE关键字关联 ON UPDATED和ON DELETE动作。

ALTER TABLE修改表涉及存储生成列时,生成列的CHECK约束检查生效。

GaussDB V2.0-8.200 集中式开始

m_format_dev_version参数设置:

  • GaussDB V2.0-8.100 企业版,设置为 s1。
  • GaussDB V2.0-8.200 企业版和 GaussDB V2.0-9.0 企业版,设置为 s2。

操作步骤

集中式版

  1. 连接上GaussDB数据库,切换至GaussDB的安装用户下。

    su - omm

    "omm"为示例用户,切换时以实际安装用户为准。

  2. 执行以下命令,设置参数。

    gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_behavior_compat_options='enable_escape_string,enable_conflict_funcs,select_column_name,enable_precision_decimal'"; ----GaussDB V2.0-8.200 集中式开始的版本

    gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_behavior_compat_options='enable_escape_string,enable_conflict_funcs,select_column_name,enable_precision_decimal,forbid_none_space_comment,enable_load_data_remote_transmission,cast_as_new_json,grant_database_nomapping,disable_illegal_function_syntax'"; ----GaussDB V2.0-9.0 集中式开始的版本

    gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_dev_version='s2'"; --GaussDB V2.0-8.100 版本使用S1,GaussDB V2.0-8.200 到GaussDB V2.0-9.0 版本使用S2