更新时间:2024-11-12 GMT+08:00
分享

平台和客户端兼容性

很多平台都使用数据库系统,数据库系统的对外兼容性给平台提供了很大的便利。

a_format_date_timestamp

参数说明控制返回的日期时间。在ORA模式下,当事务开启时,函数current_date()、current_timestamp()、localtimestamp()返回当前SQL启动的时间戳。

参数类型:布尔型

参数单位:

取值范围

  • on:返回当前SQL启动的时间戳。
  • off:返回事务开启的日期或日期及时间。

默认值:off

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。在开启事务需要返回系统时间时可开启该参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

convert_string_to_digit

参数说明设置隐式转换优先级,是否优先将字符串转为数字。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示优先将字符串转为数字。
  • off:表示不优先将字符串转为数字。

默认值on

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:调整该参数会修改内部数据类型转换规则,导致不可预期的行为,请谨慎操作。

character_set_connection

参数说明:用于设置常量字符串的字符集。修改该参数会同步将collation_connection修改成该字符集的默认字符序。

  • 在sql_compatibility='MYSQL'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
  • 在M-Compatibility模式下生效。

参数类型:字符串

参数单位:

取值范围:

  • sql_compatibility='MYSQL'兼容性模式下支持的字符集,请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节中的“COLLATE collation”。
  • 在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:与当前server_encoding保持一致。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置的字符集和当前环境不符时,可能导致多次转码,影响性能。

collation_connection

参数说明:用于设置常量字符串的字符序。修改该参数会同步将character_set_connection修改成该字符序的默认字符集。

  • 在sql_compatibility='MYSQL'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
  • 在M-Compatibility模式下生效。

参数类型:字符串

参数单位:

取值范围:

  • sql_compatibility='MYSQL'兼容性模式下支持的字符序,请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节中的“COLLATE collation”。
  • 在M-Compatibility模式下取值范围为其支持的字符序,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”

默认值:当前server_encoding的默认字符序,若没有server_encoding的默认字符序,则为“default”。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置的字符序和当前环境不符时,可能导致多次转码,影响性能。

character_set_client

参数说明:该参数用于指定客户端字符集。同client_encoding含义一致。

参数类型:字符串

参数单位:

取值范围:sql_compatibility='M'兼容性模式下支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:与客户端字符集一致。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置的字符集和当前环境不符时,可能会出现乱码。

当前版本设置该参数不生效。

character_set_database

参数说明:该参数用于指定DATABASE、Schema的字符集。

参数类型:字符串

参数单位:

取值范围:sql_compatibility='M'兼容性模式下支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:同当前database的字符集一致。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 在M-Compatibility模式下生效。
  • 当前版本设置该参数不生效。

collation_database

参数说明:该参数用于指定DATABASE、Schema的字符序。

参数类型:字符串

参数单位:

取值范围:sql_compatibility='M'兼容性模式下支持的字符序,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:当前database的字符集的默认字符序,若默认字符序不存在,则为“default”。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 在M-Compatibility模式下生效。
  • 当前版本设置该参数不生效。

character_set_server

参数说明:该参数用于指定创建DATABASE、Schema时的字符集。

参数类型:字符串

参数单位:

取值范围:sql_compatibility='M'兼容性模式下支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:同当前database的字符集一致。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 在M-Compatibility模式下生效。
  • 当前版本设置该参数不生效。

collation_server

参数说明:该参数用于指定创建DATABASE、Schema时的字符序。

参数类型:字符串

参数单位:

取值范围:sql_compatibility='M'兼容性模式下支持的字符序,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。

默认值:当前database的字符集的默认字符序,若默认字符序不存在,则为“default”。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 在M-Compatibility模式下生效。
  • 当前版本设置该参数不生效。

character_set_results

参数说明:用于设置返回结果的字符集。

  • 在sql_compatibility='MYSQL'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
  • 在M-Compatibility模式下生效。

参数类型:字符串

参数单位:

取值范围:

  • sql_compatibility='MYSQL'兼容性模式下支持的字符集,请参见《开发指南》中“SQL参考 > SQL语法 >C > CREATE TABLE”章节中的“COLLATE collation”。
  • 在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
  • 还可以设置成null或'',此时直接以数据库的字符集输出。

默认值:与当前server_encoding保持一致。

设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置的字符集和当前环境不符时,可能会出现乱码。

enable_multiple_charset

参数说明:该参数用于控制在M-Compatibility模式下,是否可以创建表、列、schema指定字符集和当前数据库字符集不同。

参数类型:布尔型

参数单位:

取值范围

  • on:可以创建表、列、schema指定字符集和当前数据库字符集不同。
  • off:不可以创建表、列、schema指定字符集和当前数据库字符集不同。

默认值:on。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据实际业务需求设置。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

nls_timestamp_format

参数说明设置时间戳默认格式。

参数类型:字符串

参数单位:

取值范围字符串

默认值"DD-Mon-YYYY HH:MI:SS.FF AM"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

nls_timestamp_tz_format

参数说明设置带时区时间戳默认格式。

参数类型:字符串

参数单位:

取值范围字符串

默认值"DD-Mon-YYYY HH:MI:SS.FF AM"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

此参数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。

nls_nchar_characterset

参数说明:搭配nchr(cvalue int|bigint)系统函数使用,设置国家字符集。

参数类型字符串

参数单位

取值范围:“AL16UTF16”、“UTF8”,不区分大小写。

默认值:"AL16UTF16"

设置方式该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 数据库不支持国家字符集,该参数只是为了兼容ORA数据库,获取用户想使用的国家字符集。
  • 该GUC参数仅限于nchr(cvalue int|bigint)函数的使用。

group_concat_max_len

参数说明:搭配函数group_concat()使用,限制其返回值长度,超长截断,并产生相应报错/告警。当sql_mode设置含有STRICT_TRANS_TABLES时,DML语句中会产生报错,其余场景中提示告警。

参数类型:整型

参数单位:

取值范围:0 ~ 9223372036854775807,目前实际生效的最大长度是1073741823,超出此长度后会有out of memory的报错。

默认值:1024

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:设置过小可能导致group_concat()返回的结果被截断。

lastval_supported

参数说明:控制是否可以使用lastval()函数。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示支持lastval()函数,同时nextval()函数不支持下推。
  • off:表示不支持lastval()函数,同时nextval()函数可以下推。

默认值:off

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

max_function_args

参数说明:函数参数最大个数。

参数类型:整型

参数单位:

取值范围:8192

默认值:8192

设置方式:该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。

设置建议:该参数不允许用户进行设置,只能查看。

设置不当的风险与影响:

max_subpro_nested_layers

参数说明:嵌套子程序的最大嵌套深度。

参数类型:整型

参数单位:

取值范围:0 ~ 100

当设置为0时,不允许使用嵌套子程序。

默认值:3

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据最大嵌套情况设置。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

transform_null_equals

参数说明:是否控制表达式expr=NULL(或NULL=expr)当作expr IS NULL处理。正确的SQL标准兼容的expr=NULL总是返回NULL(未知)。Microsoft Access里的过滤表单生成的查询使用expr=NULL来测试空值。打开这个选项后,可以使用该接口来访问数据库。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示控制表达式expr=NULL(或NULL=expr)当作expr IS NULL处理,如果expr得出NULL值则返回真,否则返回假。
  • off:表示不控制,即expr=NULL总是返回NULL(未知)。

默认值:off

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

新用户经常在涉及NULL的表达式上语义混淆,故默认值设为off。

support_extended_features

参数说明:控制是否支持数据库的扩展特性。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示支持数据库的扩展特性。
  • off:表示不支持数据库的扩展特性。

默认值:off

设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

sql_compatibility

参数说明:控制数据库的SQL语法和语句行为同哪一个主流数据库兼容。

参数类型:枚举类型

参数单位:

取值范围:

  • ORA:表示同Oracle兼容。
  • TD:表示同Teradata兼容。
  • MYSQL:表示同MySQL兼容。
  • PG:表示同PostgreSQL兼容。
  • M:表示M-Compatibility。

默认值:MYSQL

设置方式:该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。

设置建议:该参数不允许用户进行设置,只能查看。

设置不当的风险与影响:

  • 该参数只能在执行CREATE DATABASE命令(详见《开发指南》的“SQL参考 > SQL语法 > CREATE DATABASE”章节)创建数据库的时候设置。
  • 在数据库中,该参数只能是确定的一个值,要么始终设置为ORA,要么始终设置为TD,请勿任意改动,否则会导致数据库行为不一致。
  • 在M-Compatibility模式数据库分布式场景下,如果告警是在CN上产生的,则会产生WARNING信息;如果告警是在DN上产生的,暂不支持产生WARNING信息。

b_format_behavior_compat_options

参数说明:数据库MYSQL模式兼容性行为配置项。

参数类型:字符串

参数单位:

取值范围:当前只支持表1 MYSQL模式兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。

默认值:""

当b_format_version参数不为""时,b_format_behavior_compat_options会被设置为"all",而且不能被修改。

表1 MYSQL模式兼容性配置项

兼容性配置项

兼容性行为控制

default_collation

默认字符序前向兼容开关。

  • 若不设置此配置项,在未显式指定字符类型字段的字符集或字符序且表级字符序也为空时,字段为default字符序。
  • 若设置此配置项,当表级字符序不为空时,字符类型字段的字符序继承表级字符序,当表级字符序为空时,字符类型字段的字符序设置为数据库编码对应的默认字符序。

all

打开所有语法控制开关。

all不能同时和其他配置项一起指定。表格中除all外所有配置项逗号隔开的含义和取值为all含义相同。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:控制一些MYSQL兼容性特性是否可用,若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

m_format_behavior_compat_options

参数说明:数据库M-compatibility模式的兼容性行为配置项。多租场景下,该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表2,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。

默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。

表2 M-compatibility模式兼容性配置项

兼容性配置项

兼容性行为控制

enable_load_data_remote_transmission

LOAD DATA支持从客户端导入数据。

不设置此项时:LOAD DATA指定local参数后将从服务端所在环境导入文件;

设置此配置项时:LOAD DATA指定local参数后将从客户端所在环境导入数据。

设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

behavior_compat_options

参数说明:数据库兼容性行为配置项。

参数类型:字符串

参数单位:

取值范围:当前只支持表3,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开,例如:set behavior_compat_options='end_month_calculate,display_leading_zero';。

默认值:"enable_bpcharlikebpchar_compare,enable_crosstype_integer_operator,forbid_skip_tableof_empty_str_elem"

表3 兼容性配置项

兼容性配置项

兼容性行为控制

display_leading_zero

浮点数显示配置项。控制数值类型中char、character、nchar、varchar、character varying、varchar2、nvarchar2、text、clob等所有字符串类型和float4、float8、numeric等任意精度类型的小数点前0的显示,length计算数字长度时是否包含小数点前的0。

  • 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如:
    1
    2
    3
    4
    5
    gaussdb=# SELECT 0.1231243 as a, 0.1231243::numeric as b,0.1231243::integer(10,3) as c, length(0.1242343) as d;
        a     |    b     |  c   | d
    ----------+----------+------+---
     .1231243 | .1231243 | .123 | 8
    (1 row)
    
  • 设置此配置项时,对于-1~0和0~1之间的小数,显示小数点前的0。比如:
    1
    2
    3
    4
    5
    gaussdb=# select 0.1231243 as a, 0.1231243::numeric as b,0.1231243::integer(10,3) as c, length(0.1242343) as d;
         a     |     b     |   c   | d
    -----------+-----------+-------+---
     0.1231243 | 0.1231243 | 0.123 | 9
    (1 row)
    

end_month_calculate

add_months函数计算逻辑配置项。

此参数在M-Compatibility模式数据库下不生效。

假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。

  • 不设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期小,计算结果中的日期字段(Day字段)和param1的日期字段保持一致。比如:
    1
    2
    3
    4
    5
    gaussdb=# select add_months('2018-02-28',3) from sys_dummy;
    add_months
    ---------------------
    2018-05-28 00:00:00
    (1 row)
    
  • 设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期比小,计算结果中的日期字段(Day字段)和result的月末日期保持一致。比如:
    1
    2
    3
    4
    5
    gaussdb=# select add_months('2018-02-28',3) from sys_dummy;
    add_months
    ---------------------
    2018-05-31 00:00:00
    (1 row)
    

compat_analyze_sample

analyze采样行为配置项。

设置此配置项时,会优化analyze的采样行为,主要体现在analyze时全局采样会更精确的控制在三万条左右,更好地控制analyze时Coordinator端的内存消耗,保证analyze性能的稳定性。

bind_schema_tablespace

绑定模式与同名表空间配置项。

如果存在与模式名sche_name相同的表空间名,那么如果设置search_path为sche_name,default_tablespace也会同步切换到sche_name。

bind_procedure_searchpath

未指定模式名的存储过程中的数据库对象的搜索路径配置项。

在存储过程中如果不显示指定模式名,会优先在存储过程所属的模式下搜索。

如果找不到,则有两种情况:

  • 若不设置此参数,报错退出。
  • 若设置此参数,按照search_path中指定的顺序继续搜索。如果还是找不到,报错退出。

skip_insert_gs_source

开启此参数后,创建PL/SQL对象时不再插入dbe_pldeveloper.gs_source表中。

a_hash_bpchar

开启此参数后,hashbpchar函数会保留字符串末尾空格来计算哈希值。

correct_to_number

控制to_number()结果兼容性的配置项。

  • 若不设置此配置项,则to_number()函数结果默认与ORA数据库保持一致。
    1
    2
    3
    gaussdb=# select '' AS to_number_14, to_number('34,50','999,99');
    ERROR:  invalid data.
    CONTEXT:  referenced column: to_number
    
  • 若设置此配置项,则to_number()函数结果与pg11保持一致。
    1
    2
    3
    4
    5
    gaussdb=# select '' AS to_number_14, to_number('34,50','999,99');
     to_number_14 | to_number
    --------------+-----------
                  |      3450
    (1 row)
    

unbind_divide_bound

控制对整数除法的结果进行范围校验。

此参数在M-Compatibility模式数据库下不生效。

  • 若不设置此配置项,则会对除法结果做范围校验,例如,INT_MIN/(-1)会因为输出结果大于INT_MAX而报越界错误。
    1
    2
    gaussdb=# select (-2147483648)::int4 / (-1)::int4;
    ERROR:  integer out of range
    
  • 若设置此配置项,则不需要对除法结果做范围校验,例如,INT_MIN/(-1)可以得到输出结果为INT_MAX+1。
    1
    2
    3
    4
    5
    gaussdb=# select (-2147483648)::int4 / (-1)::int4;
      ?column?  
    ------------
     2147483648
    (1 row)
    

convert_string_digit_to_numeric

控制当表中以字符串形式表示的numeric常量和数字类型做比较时,是否都统一转换为numeric类型再进行比较。

此参数在M-Compatibility模式数据库下不生效。

  • 若不设置此配置项,不会将以字符串形式表示的numeric常量转换为numeric类型。
  • 若设置此配置项,会将以字符串形式表示的numeric常量转换为numeric类型。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
gaussdb=# create table test1 (c1 int, c2 varchar);
gaussdb=# insert into test1 values (2, '1.1');
gaussdb=# set behavior_compat_options='';
gaussdb=# select * from test1 where c2 > 1;
ERROR:  invalid input syntax for type bigint: "1.1"

gaussdb=# set behavior_compat_options='convert_string_digit_to_numeric';
gaussdb=# select * from test1 where c2 > 1;
 c1 | c2  
----+-----
  2 | 1.1 
(1 row)

gaussdb=# drop table test1;

return_null_string

控制函数lpad()和rpad()结果为空字符串''的显示配置项。

此参数在M-Compatibility模式数据库下不生效。

  • 不设置此配置项时,空字符串显示为NULL。
    1
    2
    3
    4
    5
    gaussdb=# select length(lpad('123',0,'*')) from sys_dummy;
    length
    --------
    
    (1 row)
    
  • 设置此配置项时,空字符串显示为''。
    1
    2
    3
    4
    5
    gaussdb=# select length(lpad('123',0,'*')) from sys_dummy;
    length
    --------
    0
    (1 row)
    

compat_concat_variadic

控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。由于MYSQL数据库无variadic类型,所以该选项对MYSQL数据库无影响。

  • 若不设置此配置项,当concat函数参数为variadic类型时,默认ORA数据库和TD数据库兼容模式下结果相同,且与ORA数据库保持一致。
    1
    2
    3
    4
    5
    gaussdb=# select concat(variadic NULL::int[]) is null;
     ?column? 
    ----------
     t
    (1 row)
    
  • 若设置此配置项,当concat函数参数为variadic类型时,保留ORA数据库和TD数据库兼容模式下不同的结果形式。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    --ORA数据库下:
    gaussdb=# select concat(variadic NULL::int[]) is null;
     ?column? 
    ----------
     t
    (1 row)
    --TD数据库下:
    gaussdb=# select concat(variadic NULL::int[]) is null;
     ?column? 
    ----------
     f
    (1 row)
    

merge_update_multi

控制在使用MERGE INTO ... WHEN MATCHED THEN UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > MERGE INTO”章节)和INSERT ... ON DUPLICATE KEY UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > INSERT”章节)时,当目标表中一条目标数据与多条源数据冲突时UPDATE行为。

  • 若设置此配置项,当存在上述场景时,该冲突行将会多次执行UPDATE。
  • 若不设置此配置项(默认),则报错,即MERGE或INSERT操作失败。

plstmt_implicit_savepoint

控制存储过程中更新语句的执行是否拥有独立的子事务。

若设置此配置项,存储过程中每条更新语句前开启隐式保存点,EXCEPTION块中默认回退到最近的保存点,从而保证只回退失败语句的修改。该选项是为了兼容ORA数据库的EXCEPTION行为。

hide_tailing_zero

numeric显示配置项。

  • 若设置此配置项,所有输出numeric的场景均隐藏小数点后的末尾0,包括显示指定format精度情况。
  • 若不设置此配置项,numeric按照指定精度显示。

例如:

gaussdb=# set behavior_compat_options='hide_tailing_zero';
gaussdb=# select cast(123.123 as numeric(15,10)) as a, to_char(cast(123.123 as numeric(15,10)), '999D999999');
    a    | to_char
---------+----------
 123.123 |  123.123
(1 row)
gaussdb=# set behavior_compat_options='';
gaussdb=# select cast(123.123 as numeric(15,10)) as a, to_char(cast(123.123 as numeric(15,10)), '999D999999');
       a        |   to_char
----------------+-------------
 123.1230000000 |  123.123000
(1 row)

truncate_numeric_tail_zero

numeric显示配置项。

  • 若设置此配置项,除to_char(numeric, format)这种显式设置精度的情况外,所有输出numeric的场景均会隐藏小数点后的末尾0。
  • 若不设置此配置项,numeric按照默认精度显示。

例如:

gaussdb=# set behavior_compat_options='truncate_numeric_tail_zero';
gaussdb=# select cast(123.123 as numeric(15,10)) as a, to_char(cast(123.123 as numeric(15,10)), '999D999999');
    a    |   to_char
---------+-------------
 123.123 |  123.123000
(1 row)
gaussdb=# set behavior_compat_options='';
gaussdb=# select cast(123.123 as numeric(15,10)) as a, to_char(cast(123.123 as numeric(15,10)), '999D999999');
       a        |   to_char
----------------+-------------
 123.1230000000 |  123.123000
(1 row)

char_coerce_compat

控制char(n)类型向其它变长字符串类型转换时的行为。该参数仅在sql_compatibility参数的值为ORA时生效,并且开启该参数后无论是隐式转换、显式转换还是通过调用text(bpchar)函数转换类型都不再省略尾部空格。

  • 若设置此配置项,转换时不再省略尾部的空格,并且如果char(n)类型的长度超过其它变长字符串类型,将会报错。
  • 若不设置此配置项,char(n)类型转换其它变长字符串类型时,会省略尾部的空格。
gaussdb=# set behavior_compat_options='';
gaussdb=# create table tab_1(col1 varchar(3));
gaussdb=# create table tab_2(col2 char(3));
gaussdb=# insert into tab_2 values('   ');
gaussdb=# insert into tab_1 select col2 from tab_2;
gaussdb=# select * from tab_1 where col1 is null;
 col1 
------
 
(1 row)
gaussdb=# select * from tab_1 where col1='   ';
 col1 
------
(0 rows)
gaussdb=# delete from tab_1;
gaussdb=# set behavior_compat_options = 'char_coerce_compat';
gaussdb=# insert into tab_1 select col2 from tab_2;
gaussdb=# select * from tab_1 where col1 is null;
 col1 
------
(0 rows)
gaussdb=# select * from tab_1 where col1='   ';
 col1 
------
    
(1 row)

gaussdb=# drop table tab_1;
gaussdb=# drop table tab_2;

aformat_regexp_match

控制正则表达式函数的匹配行为。

设置此项,且sql_compatibility参数的值为ORA或MYSQL时,正则表达式的flags参数支持的选项含义:
  1. 默认不能匹配'\n'字符。
  2. flags中包含n选项时,'.'能够匹配'\n'字符。
  3. regexp_replace(source, pattern replacement)函数替换所有匹配的子串。
  4. regexp_replace(source, pattern, replacement, flags)函数在 flags值为''或者null时,返回值为null。

否则,正则表达式的flags参数支持的选项含义:

  1. 默认能匹配'\n'字符。
  2. flags中的n选项表示按照多行模式匹配。
  3. regexp_replace(source, pattern replacement)函数仅替换第一个匹配到的子串。
  4. regexp_replace(source, pattern, replacement, flags)函数在flags值为''或者null时,返回值为替换后的字符串。

disable_rewrite_nesttable

分布式不支持。

disable_emptystr2null

ORA兼容模式绑参场景中,开启此参数后,关闭默认将字符类型传参的值从空串转换为null功能。包括text、clob、blob、raw、bytea、varchar、nvarchar2、bpchar、char、name、byteawithoutorderwithqualcol、byteawithoutordercol类型。该参数为逃生参数,非必要用户不要自行设置。

select_into_return_null

该参数在分布式场景下无效。

plsql_security_definer

  • 开启此参数后,创建存储过程时默认为定义者权限。
  • package默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置此参数。

proc_outparam_override

控制存储过程出参的重载行为,打开该参数后,对于存储过程只有out出参部分不同的情况,也可以正常创建和调用。目前只有gsql与jdbc连接数据库时可以使用该参数,对于其他工具打开该参数连接数据库时无法正常调用带有out的存储过程。

支持带有out出参的函数返回record类型,且out出参正常赋值。

proc_uncheck_default_param

函数调用时不检查默认参数省略情况配置项。

  • 若不设置此配置项,调用带有默认参数的函数时,入参从左往右排入函数,如果有非默认参数的入参缺失则会报错。比如:
    gaussdb=# create or replace function test(f1 int, f2 int default 20, f3 int, f4 int default 40, f5 int default 50) return int
    gaussdb-# as
    gaussdb$# begin
    gaussdb$# raise info 'f1:%',f1;
    gaussdb$# raise info 'f2:%',f2;
    gaussdb$# raise info 'f3:%',f3;
    gaussdb$# raise info 'f4:%',f4;
    gaussdb$# raise info 'f5:%',f5;
    gaussdb$# return 1;
    gaussdb$# end;
    gaussdb$# /
    CREATE FUNCTION
    gaussdb=# select test(1,2);
    ERROR:  function test(integer, integer) does not exist
    LINE 1: select test(1,2);
                   ^
    HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
    CONTEXT:  referenced column: test
    
    gaussdb=# drop function test;
  • 若设置此配置项,调用带有默认参数的函数时,入参从左往右排入函数,允许缺省默认参数个入参,如果有非默认参数的入参缺失,则会用错位的默认值填充该参数。比如:
    gaussdb=# create or replace function test(f1 int, f2 int default 20, f3 int, f4 int default 40, f5 int default 50) return int
    gaussdb-# as
    gaussdb$# begin
    gaussdb$# raise info 'f1:%',f1;
    gaussdb$# raise info 'f2:%',f2;
    gaussdb$# raise info 'f3:%',f3;
    gaussdb$# raise info 'f4:%',f4;
    gaussdb$# raise info 'f5:%',f5;
    gaussdb$# return 1;
    gaussdb$# end;
    gaussdb$# /
    CREATE FUNCTION
    gaussdb=# select test(1,2);
    INFO:  f1:1
    CONTEXT:  referenced column: test
    INFO:  f2:2
    CONTEXT:  referenced column: test
    INFO:  f3:20
    CONTEXT:  referenced column: test
    INFO:  f4:40
    CONTEXT:  referenced column: test
    INFO:  f5:50
    CONTEXT:  referenced column: test
     test 
    ------
        1
    (1 row)
    
    gaussdb=# drop function test;

    如上,f3被错误的默认值填充。

    说明:

    该场景下,非默认参数会被错位的默认值填充。

dynamic_sql_compat

开启此参数后:

  • 动态语句不会将模板SQL中的同名模板参数视为同一个变量,而是按照顺序依次匹配using子句中的变量值。
  • 动态语句执行语句时调用存储过程的场景,会对存储过程中参数的IN/OUT属性和using子句中的IN/OUT属性进行检查。
  • 应用场景:Execute immediate,open cursor for,return query, for var in execute sql 绑定参数场景。
说明:

动态语句执行匿名块语句时调用存储过程的场景,只针对IN参数进行矫正,如果需要对OUT参数进行检查需要设置proc_outparam_override选项。

dynamic_sql_check

开启此参数后,动态语句模板SQL中的不同模板参数个数与using子句中的变量个数不同时,将会在动态语句执行期间报错。

  • 应用场景:Execute immediate,open cursor for,return query, for var in execute sql 绑定参数场景。
说明:
  • 不推荐同时使用dynamic_sql_check选项和dynamic_sql_compat选项,开启dynamic_sql_compat选项后dynamic_sql_check选项将不再生效。
  • 动态语句执行匿名块语句时调用存储过程的场景,只针对IN参数进行检查,如果需要对OUT参数进行检查需要设置proc_outparam_override选项。
  • 动态语句执行匿名块语句时调用存储过程的场景,开启参数后不会对存储过程中参数的IN/OUT属性和using子句中的IN/OUT属性进行检查。

enable_funcname_with_argsname

开启参数后,使用select调用函数时投影别名显示完整函数。

  • 若不设置此配置项,使用select调用函数时投影别名仅显示函数名。比如:
    gaussdb=# select power(2,3);
     power 
    -------
         8
    (1 row)
    
    gaussdb=# select count(*) from db_ind_columns;
     count 
    -------
       611
    (1 row)
    
    gaussdb=# select count(index_name) from db_ind_columns;
     count 
    -------
       611
    (1 row)
    
    gaussdb=# select left('abcde', 2);
     left 
    ------
     ab
    (1 row)
    
    gaussdb=# select pg_client_encoding();
     pg_client_encoding 
    --------------------
     UTF8
    (1 row)
  • 若设置此配置项,使用select调用函数时投影别名显示完整函数。比如:
    gaussdb=# set behavior_compat_options = 'enable_funcname_with_argsname';
    SET
    gaussdb=# select power(2,3);
     power(2,3) 
    ------------
              8
    (1 row)
    
    gaussdb=# select count(*) from db_ind_columns;
     count(*) 
    ----------
          611
    (1 row)
    
    gaussdb=# select count(index_name) from db_ind_columns;
     count(index_name) 
    -------------------
                   611
    (1 row)
    
    gaussdb=# select left('abcde', 2);
     left('abcde',2) 
    -----------------
     ab
    (1 row)
    
    gaussdb=# select pg_client_encoding();
     pg_client_encoding() 
    ----------------------
     UTF8
    (1 row)
    说明:
    • 目前仅支持func_name(args_list)、func_name()、func_name(*)三种形式投影别名显示完整函数,且参数args类型仅支持字符类型、数值类型、列名、函数。函数名支持带有schema、包名。不支持参数带有其他子句(如order by子句)、不支持参数为表达式、仅支持参数带有DISTINCT关键字,不支持带有其他关键字时显示完整函数。
    • 一些特殊函数不支持投影别名显示完整函数。
      • 在非M-Compatibility模式数据库下,包括以下函数:collation for、current_date、current_time、current_timestamp、dbtimezone、localtime、localtimestamp、sysdate、sessiontimezone、rownum、current_role、current_user、session_user、user、current_catalog、current_schema、cast、extract、timestampdiff、overlay、position、substring、treat、trim、nullif、nvl、nvl2、coalesce、greatest、least、lnnvl、regexp_like以及xml函数。
      • 在M-Compatibility模式数据库下,包括以下函数:count、convert、get_format、date、time、timetsamp、date_add、date_sub、adddate、subdate、timestampadd、current_date、repeat、curdate、curtime、current_time、current_timestamp、utc_date、utc_time、utc_timestamp、localtime、localtimestamp、now、sysdate、interval、cast、extract、substr、mid、year、timestampdiff、substring、trim、coalesce、if、char、position、reverse以及default函数。
      • 在M-Compatibility模式数据库下,若同时设置此参数和m_format_behavior_compat_options = 'select_column_name'时,select_column_name优先生效。
    • 一些安全加解密函数、脱敏函数,投影别名显示完整函数可能存在安全问题,在这里就还是仅显示函数名。包括函数:gs_encrypt_aes128、gs_decrypt_aes128、gs_encrypt、gs_decrypt、gs_encrypt_bytea、gs_decrypt_bytea、aes_encrypt、aes_decrypt、pg_create_physical_replication_slot_extern、dblink_connect、creditcardmasking、basicemailmasking、fullemailmasking、alldigitsmasking、shufflemasking、randommasking、regexpmasking、gs_digest。
    • 不支持=>传参方式调用函数时投影别名显示完整函数,不支持投影别名显示"",如:select "power"(2,3)。
    • 为了让投影别名显示完整函数,本功能不受去除末尾0等参数影响。

proc_outparam_transfer_length

开启此参数后,存储过程和函数支持out出参长度传递,会在内层存储过程或者函数中报错。例如:

gaussdb=# SET behavior_compat_options='proc_outparam_override,proc_outparam_transfer_length';
SET
gaussdb=# CREATE OR REPLACE PROCEDURE out_param_test1(m in int, v inout varchar2,v1 inout varchar2) is
gaussdb$# begin
gaussdb$#     v := 'aaaddd';
gaussdb$# v1 := 'aaaddd';
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CREATE OR REPLACE PROCEDURE call_out_param_test1 is
gaussdb$#     v varchar2(5) := 'aabbb';
gaussdb$# v1 varchar2(6) := 'aabb';
gaussdb$# begin
gaussdb$#     out_param_test1(5,v,v1);
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CALL call_out_param_test1();
ERROR:  value too long for type character varying(5)
CONTEXT:  PL/SQL function out_param_test1(integer,character varying,character varying) line 3 at assignment
PL/SQL function call_out_param_test1() line 4 at SQL statement

gaussdb=# DROP PROCEDURE call_out_param_test1;
gaussdb=# DROP PROCEDURE out_param_test1;

allow_procedure_compile_check

该参数在分布式场景下无效。

tableof_elem_constraints

开启此参数后:

  1. 集合类型会对元素合法性进行校验。
  2. 索引为varchar的集合类型,索引长度也会进行合法性校验。

行为差异详情和示例具体可参考《开发指南》中“存储过程 > 数组,集合和record > 集合”章节。

说明:
  • 不要在同session内切换并使用该参数。
  • 对于升级新版本的数据库:
    • 已经在存储过程或PACKAGE内定义好的集合类型,开启tableof_elem_constraints参数不会使上述功能生效。需要重新创建集合类型,即需要重新创建存储过程或PACKAGE,执行CREATE OR REPLACE或DROP + CREATE操作来重新创建存储过程或PACKAGE从而重新创建集合类型后该参数才能生效。
    • 通过CREATE TYPE type_name is table of data_type语法创建出来的集合类型,需要DROP类型后重新创建该功能才能生效。

元素合法性校验示例:

未开启此参数时调用如下存储过程,元素不校验。

gaussdb=# CREATE OR REPLACE procedure p1 is
gaussdb$#     type t1 is table of varchar(5);
gaussdb$#     v t1 := t1();
gaussdb$# begin
gaussdb$#     v.extend();
gaussdb$#     v(1) := '123456';
gaussdb$#     raise info '%', v;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CALL p1();
INFO:  {123456}
 p1 
----

(1 row)

gaussdb=# DROP procedure p1;

开启此参数后调用如下存储过程,元素校验会报错。

gaussdb=# SET behavior_compat_options = 'tableof_elem_constraints';
SET
gaussdb=# CREATE OR REPLACE procedure p1 is
gaussdb$#     type t1 is table of varchar(5);
gaussdb$#     v t1 := t1();
gaussdb$# begin
gaussdb$#     v.extend();
gaussdb$#     v(1) := '123456';
gaussdb$#     raise info '%', v;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CALL p1();
ERROR:  value too long for type character varying(5)
CONTEXT:  PL/SQL function p1() line 5 at assignment

索引值合法性校验示例:

未开启该参数时,索引值超过定义长度不报错。

gaussdb=# CREATE OR REPLACE procedure p1 is
gaussdb$#     type t1 is table of int index by varchar(5);
gaussdb$#     v t1;
gaussdb$# begin
gaussdb$#     v('123456') := 1;
gaussdb$#     raise info '%', v;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CALL p1();
INFO:  {indexbyType:varchar,"123456"=>1}
 p1 
----

(1 row)

gaussdb=# DROP procedure p1;

开启该参数后,索引值超过定义长度报错。

gaussdb=# SET behavior_compat_options = 'tableof_elem_constraints';
SET
gaussdb=# CREATE OR REPLACE procedure p1 is
gaussdb$#     type t1 is table of int index by varchar(5);
gaussdb$#     v t1;
gaussdb$# begin
gaussdb$#     v('123456') := 1;
gaussdb$#     raise info '%', v;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# CALL p1();
ERROR:  value too long for type character varying(5)
CONTEXT:  PL/SQL function p1() line 4 at assignment

allow_rownum_alias

开启此参数后,将允许ROWNUM在SQL语句中通过AS语法用作列的别名,ROWNUM将作为普通标识符使用,不再能够作为伪列使用。

此参数在M-Compatibility模式数据库下不生效。

说明:

不建议在执行业务期间变更该参数的状态。开启参数的状态下,在数据库中用ROWNUM作为名称创建的数据库对象(如表名,列名,数据库名等),在参数关闭后,将会产生歧义,行为不可预期。关闭参数的状态下,在数据库中ROWNUM作为伪列使用的行为,在参数开启后,将失效,行为不可预期。

current_sysdate

开启此参数后,执行sysdate时,会获取当前操作系统时间。

gaussdb=# set behavior_compat_options='current_sysdate';
SET
gaussdb=# select sysdate;
current_sysdate
---------------------
2023-06-20 20:15:27
(1 row)

allow_function_procedure_replace

默认场景下,对于ORA和PG兼容模式,当有一个包外的存储过程(或函数)时,创建一个同名的函数(或存储过程),与已有对象类型不同,不支持创建并报错。开启此参数后,通过create or replace的方式可以实现包外同名的存储过程和函数对象之间的类型替换。

gaussdb=# create or replace function proc_test return varchar2 as
gaussdb$# begin
gaussdb$# return '1';
gaussdb$# end;
gaussdb$# /
CREATE FUNCTION
gaussdb=# create or replace procedure proc_test as
gaussdb$# begin
gaussdb$# null;
gaussdb$# end;
gaussdb$# /
ERROR:  cannot change routine kind
DETAIL:  "proc_test" is a function.
gaussdb=# \df+ proc_test
                                                                             List of functions
 Schema |   Name    | Result data type  | Argument data types |  Type  | Volatility |   Owner   | Language | Source code | Description | fencedmode | propackage | prokind
--------+-----------+-------------------+---------------------+--------+------------+-----------+----------+-------------+-------------+------------+------------+---------
 public | proc_test | character varying |                     | normal | volatile   | wangxinyu | plpgsql  |  DECLARE   +|             | f          | f          | f
        |           |                   |                     |        |            |           |          | begin      +|             |            |            |
        |           |                   |                     |        |            |           |          | return '1';+|             |            |            |
        |           |                   |                     |        |            |           |          | end         |             |            |            |
(1 row)

-- 设置参数后允许替换类型
gaussdb=# set behavior_compat_options='allow_function_procedure_replace';
SET
gaussdb=# create or replace procedure proc_test as
gaussdb$# begin
gaussdb$# null;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# \df+ proc_test
                                                                            List of functions
 Schema |   Name    | Result data type | Argument data types |  Type  | Volatility |   Owner   | Language | Source code | Description | fencedmode | propackage | prokind
--------+-----------+------------------+---------------------+--------+------------+-----------+----------+-------------+-------------+------------+------------+---------
 public | proc_test | void             |                     | normal | volatile   | wangxinyu | plpgsql  |  DECLARE   +|             | f          | f          | p
        |           |                  |                     |        |            |           |          | begin      +|             |            |            |
        |           |                  |                     |        |            |           |          | null;      +|             |            |            |
        |           |                  |                     |        |            |           |          | end         |             |            |            |
(1 row)

gaussdb=# drop procedure proc_test;

collection_exception_backcompat

控制在PL/SQL中集合类型相关报错抛出的异常值,当前控制三种异常值,对应关系如下:

未开启该参数 开启该参数

collection_is_null program_limit_exceeded

subscript_beyond_count program_limit_exceeded

subscript_outside_limit program_limit_exceeded

用例:

gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1;
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v.count();
gaussdb$# exception when collection_is_null then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Reference to uninitialized collection
 p1 
----

(1 row)

gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1 := t1(1, 2, 3);
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v(4);
gaussdb$# exception when subscript_beyond_count then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Subscript beyond count
 p1 
----

(1 row)

gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1 := t1(1, 2, 3);
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v(-1);
gaussdb$# exception when subscript_outside_limit then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Subscript outside of limit
 p1 
----

(1 row)

gaussdb=# set behavior_compat_options = 'collection_exception_backcompat';
SET
gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1;
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v.count();
gaussdb$# exception when program_limit_exceeded then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Reference to uninitialized collection
 p1 
----

(1 row)

gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1 := t1(1, 2, 3);
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v(4);
gaussdb$# exception when program_limit_exceeded then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Subscript beyond count
 p1 
----

(1 row)

gaussdb=# create or replace procedure p1 is
gaussdb$#     type t1 is table of int;
gaussdb$#     v t1 := t1(1, 2, 3);
gaussdb$#     v_int int;
gaussdb$# begin
gaussdb$#     v_int := v(-1);
gaussdb$# exception when program_limit_exceeded then
gaussdb$#     raise info '%', sqlerrm;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# call p1();
INFO:  Subscript outside of limit
 p1 
----

(1 row)

gaussdb=# drop procedure p1;

enable_case_when_alias

开启该参数后,case when和decode语法的别名为以__unnamed_开头的字符串。

用例:

gaussdb=# set behavior_compat_options='enable_case_when_alias';
SET
gaussdb=# create table test(c1 varchar2);
CREATE TABLE
gaussdb=# insert into test values('x');
INSERT 0 1
gaussdb=# select decode(c1,'x','0','default') from test;
 __unnamed_decode__ 
--------------------
 0
(1 row)

gaussdb=# select (case c1 when 'x' then '0' else 'default' end) from test;
 __unnamed_case_when__ 
-----------------------
 0
(1 row)

gaussdb=# drop table test;

plsql_rollback_keep_user

控制在PL/SQL中rollback和rollback to savepoint是否修改当前用户。当开启此参数时,PL/SQL中rollback将不会修改当前用户。

用例:

gaussdb=# create user plsql_rollback1 password '********';
gaussdb=# create user plsql_rollback2 password '********';
gaussdb=# grant plsql_rollback1 to plsql_rollback2;
gaussdb=# create or replace procedure plsql_rollback1.p1 () authid definer
gaussdb-# as
gaussdb$# va int;
gaussdb$# begin
gaussdb$# raise info 'current usr:%', current_user;
gaussdb$# rollback;
gaussdb$# raise info 'current usr:%', current_user;
gaussdb$# end;
gaussdb$# /
CREATE PROCEDURE
gaussdb=# set session AUTHORIZATION plsql_rollback2 PASSWORD '********';
SET
gaussdb=> set behavior_compat_options = 'plsql_rollback_keep_user';
SET
gaussdb=> call plsql_rollback1.p1 ();
INFO:  current usr:plsql_rollback1
INFO:  current usr:plsql_rollback1
p1
----

(1 row)
说明:
  • 该参数仅在数据库兼容性为ORA时有效。

enable_bpcharlikebpchar_compare

启用/关闭bpcharlikebpchar和bpcharnlikebpchar操作符。

  • 新安装的数据库默认开启该参数。
  • 505.1.0版本之前的数据库通过升级操作后,该参数默认关闭。
 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
gaussdb=# SELECT bpcharlikebpchar('455'::BPCHAR(10), '455  '::BPCHAR);
 bpcharlikebpchar 
------------------
 f
(1 row)
gaussdb=# SELECT bpcharlikebpchar('455 '::BPCHAR(10), '455 '::BPCHAR(10));
 bpcharlikebpchar 
------------------
 t
(1 row)
gaussdb=# SELECT bpcharlikebpchar('455 '::BPCHAR(10), '455'::BPCHAR(10));
 bpcharlikebpchar 
------------------
 t
(1 row)
gaussdb=# SELECT bpcharlikebpchar('455 '::BPCHAR(10), '455'::BPCHAR(11));
 bpcharlikebpchar 
------------------
 f
(1 row)
gaussdb=# CREATE TABLE op_test (
  col BPCHAR(2) DEFAULT NULL
 );
CREATE TABLE
gaussdb=# CREATE INDEX op_index ON op_test(col);
CREATE INDEX
gaussdb=# INSERT INTO op_test VALUES ('a');
INSERT 0 1
gaussdb=# INSERT INTO op_test VALUES ('1');
INSERT 0 1
gaussdb=# INSERT INTO op_test VALUES ('11');
INSERT 0 1
gaussdb=# INSERT INTO op_test VALUES ('12');
INSERT 0 1
gaussdb=# INSERT INTO op_test VALUES ('sd');
INSERT 0 1
gaussdb=# INSERT INTO op_test VALUES ('aa');
INSERT 0 1
gaussdb=# SHOW behavior_compat_options;
 behavior_compat_options 
-------------------------
(1 row)
--当behavior_compat_options不包含enable_bpcharlikebpchar_compare时,则未启用最新bpcharlikebpchar操作符,其bpchar匹配bpchar返回结果集非预期(正常应返回全部数据)。
gaussdb=# EXPLAIN (COSTS OFF) SELECT * FROM op_test WHERE col LIKE col::BPCHAR ORDER BY col;
              QUERY PLAN              
--------------------------------------
 Sort
   Sort Key: col
   ->  Seq Scan on op_test
         Filter: (col ~~ (col)::text)
(4 rows)
gaussdb=# SELECT * FROM op_test WHERE col LIKE col::BPCHAR ORDER BY col;
 col 
-----
 11
 12
 aa
 sd
(4 rows)
gaussdb=# SET behavior_compat_options = 'enable_bpcharlikebpchar_compare';
SET
gaussdb=# SHOW behavior_compat_options;
     behavior_compat_options     
---------------------------------
 enable_bpcharlikebpchar_compare
(1 row)
--开启参数后,将启用最新bpcharlikebpchar操作符,其匹配时返回行为符合预期行为。
gaussdb=# EXPLAIN (COSTS OFF) SELECT * FROM op_test WHERE col LIKE col::BPCHAR ORDER BY col;
          QUERY PLAN          
------------------------------
 Sort
   Sort Key: col
   ->  Seq Scan on op_test
         Filter: (col ~~ col)
(4 rows)
gaussdb=# SELECT * FROM op_test WHERE col LIKE col::BPCHAR ORDER BY col;
 col 
-----
 1 
 11
 12
 a 
 aa
 sd
(6 rows)
gaussdb=# DROP TABLE op_test;
DROP TABLE
说明:
  • 该参数仅在sql_compatibility兼容性参数设置为ORA时生效。
  • 启用该参数,会影响BPCHAR类型之间进行LIKE或NOT LIKE模式匹配时的结果集与执行计划。

cursor_asensitive

打开该参数后,游标数据敏感行为兼容505.1之前版本。默认关闭该参数,数据库实现数据非敏感游标。

  • 若设置此配置项,游标数据敏感行为兼容505.1之前版本,某些游标可以看到OPEN后的修改。
     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
    gaussdb=# set behavior_compat_options='cursor_asensitive';
    SET
    gaussdb=# create table t1(c1 int, c2 varchar,c3 varchar) distribute by hash(c1);
    CREATE TABLE
    gaussdb=# insert into t1 values(1,'Tom','Jones');
    INSERT 0 1
    gaussdb=# create or replace function func1() returns sys_refcursor
    gaussdb-# as $$
    gaussdb$# declare
    gaussdb$# x sys_refcursor;
    gaussdb$# cursor cur1 for select count(1) from t1 where c2 = 'Joe';
    gaussdb$# begin
    gaussdb$# open cur1;
    gaussdb$# update t1 set c2='Joe' where c3='Jones';
    gaussdb$# fetch cur1 into x;
    gaussdb$# close cur1;
    gaussdb$# return x;
    gaussdb$# end;$$
    gaussdb-# LANGUAGE plpgsql;
    CREATE FUNCTION
    gaussdb=# call func1();
     func1
    -------
     1
    (1 row)
    
    gaussdb=# drop function func1;
    gaussdb=# drop table t1;
    
  • 若不设置此配置项,游标OPEN确定游标的结果集,看不到OPEN后的修改。
     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
    gaussdb=# show behavior_compat_options;
     behavior_compat_options
    -------------------------
    
    (1 row)
    gaussdb=# create table t1(c1 int, c2 varchar,c3 varchar) distribute by hash(c1);
    CREATE TABLE
    gaussdb=# insert into t1 values(1,'Tom','Jones');
    INSERT 0 1
    gaussdb=# create or replace function func1() returns sys_refcursor
    gaussdb-# as $$
    gaussdb$# declare
    gaussdb$# x sys_refcursor;
    gaussdb$# cursor cur1 for select count(1) from t1 where c2 = 'Joe';
    gaussdb$# begin
    gaussdb$# open cur1;
    gaussdb$# update t1 set c2='Joe' where c3='Jones';
    gaussdb$# fetch cur1 into x;
    gaussdb$# close cur1;
    gaussdb$# return x;
    gaussdb$# end;$$
    gaussdb-# LANGUAGE plpgsql;
    CREATE FUNCTION
    gaussdb=# call func1();
     func1
    -------
     0
    (1 row)
    
    gaussdb=# drop function func1;
    gaussdb=# drop table t1;
    

enable_crosstype_integer_operator

启用/关闭跨类型整型操作符。

  • 全新安装的数据库默认开启该参数。
  • 505.1.0版本之前的数据库通过升级操作后,该参数默认关闭。
  • 涉及操作符范围=、<>、<、>、<=、>=。
  • 开启该参数后,涉及的跨类型整型比较,不再需要隐式转换,可直接进行比较。如下以(int1 op int2)举例:
 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
gaussdb=# CREATE TABLE implicit_index(c1 int1);
CREATE TABLE
gaussdb=# CREATE INDEX idx1 ON implicit_index(c1);
CREATE INDEX
gaussdb=# SET behavior_compat_options='enable_crosstype_integer_operator';
SET
gaussdb=# EXPLAIN SELECT * FROM implicit_index WHERE c1 = 1::int2;
                                   QUERY PLAN                                    
---------------------------------------------------------------------------------
 [Bypass]
 Index Only Scan using idx1 on implicit_index  (cost=0.00..4.48 rows=13 width=1)
   Index Cond: (c1 = 1::smallint)
(3 rows)

gaussdb=# SET behavior_compat_options='';
SET
gaussdb=# EXPLAIN SELECT * FROM implicit_index WHERE c1 = 1::int2;
                           QUERY PLAN                           
----------------------------------------------------------------
 Seq Scan on implicit_index  (cost=0.00..49.52 rows=13 width=1)
   Filter: ((c1)::bigint = 1::smallint)
(2 rows)

gaussdb=# DROP TABLE implicit_index;
DROP TABLE
说明:
  • 该参数仅在sql_compatibility兼容性参数设置为ORA时生效。
  • 启用该参数,会影响涉及如下场景的操作符的执行计划:
    • (int1 op int2)
    • (int1 op int4)
    • (int1 op int8)
    • (int1 op int16)
    • (int1 op numeric)
    • (int2 op int1)
    • (int2 op int16)
    • (int2 op numeric)
    • (int4 op int1)
    • (int4 op int16)
    • (int4 op numeric)
    • (int8 op int1)
    • (int8 op int16)
    • (int8 op numeric)
    • (int16 op int1)
    • (int16 op int2)
    • (int16 op int4)
    • (int16 op int8)
    • (numeric op int1)
    • (numeric op int2)
    • (numeric op int4)
    • (numeric op int8)

forbid_package_function_with_prefix

打开该参数后,创建package内的函数时,如果函数有前缀,则会报错。

例如:

gaussdb=# SET behavior_compat_options='forbid_package_function_with_prefix';
SET
gaussdb=# CREATE SCHEMA schema1;
gaussdb=# CREATE OR REPLACE package pck1
    IS
    procedure schema1.proc1();
    END pck1;
    /
ERROR:  not support procedure name use *.* format in package at or near ";"
CONTEXT:  compilation of PL/pgSQL package "pck1" near line 2

gaussdb=# DROP SCHEMA schema1;

time_constexpr_compact

打开该参数后,执行时间表达式场景,会根据常量是否含有时区,自动返回with timezone类型或without timezone类型。

目前支持timestamp类型、time类型。

--执行不带时区的时间戳表达式。
gaussdb=# SELECT timestamp '1999-03-15 8:00:00';
      timestamp      
---------------------
 1999-03-15 08:00:00
(1 row)
--执行带时区的时间戳表达式 返回timestamp with time zone类型。
gaussdb=# SELECT timestamp '1999-03-15 8:00:00 -8:00:00';
      timestamptz       
------------------------
 1999-03-16 00:00:00+08
(1 row)

enable_use_ora_timestamptz

开启后TIMESTAMP AT TIME ZONE语法得到的日期时间跟ORA数据库保持一致。由于GaussDB只能显示session时区,ORA可以显示输入的时区,当时区不一致时显示的结果不同,将日期时间转换到相同时区后是同一时间点。

--打开参数前
gaussdb=# SELECT timestamp '2024-03-20 01:30:00’ at time zone 'Europe/Moscow' FROM dual;
       timezone
----------------------
2024-03-20 06:30:00+08
(1 row)

-- 打开参数后
gaussdb=# SET behavior_compat_options='enable_use_ora_timestamptz';
SET
gaussdb=# SELECT timestamp '2024-03-20 01:30:00’ at time zone 'Europe/Moscow' FROM dual;
       timezone
----------------------
2024-03-20 01:30:00+08
(1 row)
说明:

该参数仅在数据库兼容性为ORA时有效。

forbid_skip_tableof_empty_str_elem

用于控制无索引的集合类型对于'{1,,3}'格式字符串的输入行为。

  • 打开该参数后,无索引的集合型将不支持'{1,,3}'格式字符串的输入。
    gaussdb=# CREATE TYPE t1 IS TABLE OF int;
    CREATE TYPE
    gaussdb=# CREATE OR REPLACE PROCEDURE p1(v t1) IS
    gaussdb$# BEGIN
    gaussdb$#      FOR i IN 1..v.count LOOP
    gaussdb$#          dbe_output.print_line('v(' || i || ') is ' || v(i));
    gaussdb$#      END LOOP;
    gaussdb$# END;
    gaussdb$# /
    CREATE PROCEDURE
    gaussdb=# SET behavior_compat_options = 'forbid_skip_tableof_empty_str_elem';
    SET
    gaussdb=# CALL p1('{1,,3}');
    ERROR:  Malformed nesttable literal: "{1,,3}".
    LINE 1: call p1('{1,,3}');
                    ^
    gaussdb=# CALL p1('{1,}');
    ERROR:  Malformed nesttable literal: "{1, }".
    LINE 1: call p1('{1, }');
                    ^
    gaussdb=# CALL p1('{,3}');
    ERROR:  Malformed nesttable literal: "{ ,3}".
    LINE 1: call p1('{ ,3}');
                    ^
    gaussdb=# DROP PROCEDURE p1;
    DROP PROCEDURE
    gaussdb=# DROP TYPE t1;
    DROP TYPE
  • 关闭该参数后,无索引的集合型将支持'{1,,3}'格式字符串的输入,在进行转换时会自动过滤空串。
    gaussdb=# CREATE TYPE t1 IS TABLE OF int;
    CREATE TYPE
    gaussdb=# CREATE OR REPLACE PROCEDURE p1(v t1) IS
    gaussdb$# BEGIN
    gaussdb$#      FOR i IN 1..v.count LOOP
    gaussdb$#          dbe_output.print_line('v(' || i || ') is ' || v(i));
    gaussdb$#      END LOOP;
    gaussdb$# END;
    gaussdb$# /
    CREATE PROCEDURE
    gaussdb=# SET behavior_compat_options = '';
    SET
    gaussdb=# CALL p1('{1,,3}');
    v(1) is 1
    v(2) is 3
     p1 
    ----
    
    (1 row)
    
    gaussdb=# CALL p1('{1,}');
    v(1) is 1
     p1 
    ----
    
    (1 row)
    
    gaussdb=# CALL p1('{,3}');
    v(1) is 3
     p1 
    ----
    
    (1 row)
    
    gaussdb=# DROP PROCEDURE p1;
    DROP PROCEDURE
    gaussdb=# DROP TYPE t1;
    DROP TYPE

sys_function_without_brackets

开启该参数后,对于ORA兼容模式下无入参系统函数,可以不带括号进行调用。

1
2
3
4
5
6
gaussdb=# SET behavior_compat_options='sys_function_without_brackets';
gaussdb=# SELECT systimestamp;
         systimestamp          
-------------------------------
 2024-04-16 15:55:21.614342+08
(1 row)

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据数据库兼容对象进行调整。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

a_format_version

参数说明:数据库平台兼容性行为配置项。

参数类型:字符串

参数单位:

取值范围:当前支持的兼容性配置项如表4所示。

默认值:"10c"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

表4 兼容性配置项

兼容性配置项

兼容性行为控制

10c

ORA平台兼容10C版本。

a_format_dev_version

参数说明:数据库平台迭代小版本兼容性行为配置项。

参数类型:字符串

参数单位:

取值范围:当前支持的兼容性配置项如表5所示。

默认值:"s6"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

表5 兼容性配置项

兼容性配置项

兼容性行为控制

s1

  • ORA平台兼容迭代小版本,影响函数(TRUNC(date, fmt),ROUND(date, fmt),NVL2,LPAD,RPAD,ADD_MONTHS,MONTHS_BETWEEN,REGEXP_REPLACE,REGEXP_COUNT,TREAT,EMPTY_CLOB,INSTRB,trunc(number),greatest,least,mod,round(number),cast,to_date,to_timestamp,chr,rtrim,translate,to_char,to_number,to_timestamp_tz)。
  • 数据类型转换:小数字符串转换成整数类型(int1/int2/int4/int8/int16)时进行四舍五入。
  • 数据类型转换:支持timestamp with time zone到timestamp without time zone的隐式转换。

s2

  • ORA平台兼容迭代小版本,影响函数(dump, to_single_byte, to_multi_byte, nls_upper, nls_lower, initcap, ascii2, asciistr, unistr, vsize, cosh, remainder, sinh, tanh, nanvl, current_date, current_timestamp, dbtimezone, numtodsinterval, numtoyminterval, new_time, sessiontimezone, sys_extract_utc, tz_offset, to_binary_double, to_binary_float, to_dsinterval, to_yminterval, lnnvl, ora_hash)。
  • 兼容配置项为s1时的所有行为。

s3

  • ORA平台兼容迭代小版本,开启参数,支持无参函数嵌套调用。
  • 兼容配置项为s2时的所有行为。

s4

  • ORA平台兼容迭代小版本,影响函数nchr(cvalue int|bigint)、to_timestamp_tz、getclobval(xml)、getstringval(xml)。
  • 兼容配置项为s3时的所有行为。

s5

  • ORA平台兼容迭代小版本,开启参数,支持复合类型与函数同名,优先解析为复合类型,影响函数sys_guid()。
  • 兼容配置项为s4时的所有行为。

s6

  • ORA平台兼容迭代小版本,开启参数,影响函数mod(text, int)。
  • 兼容配置项为s5时的所有行为。

b_format_version

参数说明:数据库平台兼容性行为配置项,用于控制MySQL兼容模式下的前向兼容性。

  • 仅当sql_compatibility兼容性参数设置为MYSQL时,b_format_version参数才会生效。
  • 当该参数设置为非空字符串时,会同时设置参数b_format_behavior_compat_options为“ALL”值,参数bytea_output为“escape”值。当该参数重新设置为空字符串时,会将b_format_behavior_compat_options、bytea_output参数设为原来的值。

参数类型:字符串

参数单位:

取值范围:空字符串""或"5.7"

默认值:""

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:b_format_dev_version一起设置,在安装部署后立即设置,后期非必要无需变更。

设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。

b_format_dev_version

参数说明:数据库平台迭代小版本兼容性行为配置项。

sql_compatibility兼容性参数设置为MYSQL且b_format_version设置为“5.7”时,b_format_dev_version才会生效。

参数类型:字符串

参数单位:

取值范围:空字符串""或表6中的兼容性配置项。

表6 兼容性配置项

兼容性配置项

兼容性行为控制

s1

  1. 影响如下参数:

    参数打开会将disable_keyword_options参数中的datetime选项去除,表示datetime作为非保留关键字使用。datetime可以作为表名、列名、别名使用,但不能作为函数名、存储过程名、函数或存储过程的参数名使用。

  2. 影响如下函数:

    curdate,from_days,date_format,str_to_date,current_date,datediff,timestampdiff,date_add,subtime,month,time_to_sec,to_days,to_seconds,dayname,monthname,convert_tz,sec_to_time,addtime,adddate,date_sub,timediff,last_day,weekday,from_unixtime,unix_timestamp,subdate,day,year,weekofyear,dayofmonth,dayofyear,week,yearweek,dayofweek,time_format,hour,minute,second,microsecond,quarter,utc_date,get_format,extract,makedate,period_add,timestamppadd,period_diff,utc_time,utc_timestamp,sysdate,current_timestamp,maketime,curtime,current_time,localtime,localtimestamp,now,lc_time_names,default_week_format,json_object。

  3. 影响如下类型:
    1. 兼容整型类型tinyint,范围变更为-128 ~ 127。
    2. 兼容字符串类型char、varchar、char(n)和varchar(n)的精度n由字节长度变为字符长度。
    3. 兼容文本类型tinytext、mediumtext和longtext。这些类型在开启参数后会被映射为text类型。
    4. 兼容二进制类型tinyblob、blob、mediumblob和longblob。这些类型在开启参数后会被映射为bytea类型。
    5. 兼容浮点类型double、float和real。double映射为float8类型,double(p, s)映射为numeric类型,float(p, s)映射为numeric类型,real映射为float8,real(p, s)映射为numeric类型。
    6. 兼容高精度类型numeric、dec和decimal。未指定精度和标度时变更默认精度为10,标度为0。
    7. 兼容时间类型datetime、timestamp、time和date。datetime[(p)]替换成timestamp without time zone[(p)]类型。timestamp[(p)] 替换成timestamp with time zone[(p)]类型。这些类型的输入输出、范围、精度等规格有变更,具体见《开发指南》中“SQL参考 > 数据类型”相关章节。
    8. 兼容整型类型tinyint、smallint、int、bigint,这些类型在开启参数后显示宽度和ZEROFILL属性功能生效。
  4. 影响如下语法:

    支持指定列约束ON UPDATE update_expr。

  5. 影响如下操作符:
    1. 使用bytea类型间的||操作符报错。
    2. 支持REGEXP操作符。

s2

包含s1控制的兼容性行为,此外还包含以下影响:

  1. 影响如下参数:
    1. 此选项打开时,standard_conforming_strings、escape_string_warning参数被置为off。
    2. 此选项打开时,collation_connection、character_set_connection参数功能才会生效。
  2. 影响如下功能:
    1. like操作符对于匹配串末尾是转义符的场景不再报错。
    2. 字符集、字符序的排序规则优先级将发生变更,详见《开发指南》中“SQL参考 > 字符集与字符序 > 字符集和字符序合并规则”章节。
    3. 打开参数后,不支持外键字符序和列上字符序不一致。
  3. 影响如下语法:
    1. 支持“CREATE TABLE table_name LIKE source_table”语法。
    2. “CREATE TABLE table_name LIKE source_table”和“CREATE TABLE table_name (LIKE source_table)”语法不支持指定INCLUDING和EXCLUDING选项,缺省等同于指定INCLUDING ALL。
    3. 支持LOAD DATA语法,gs_loader中部分与LOAD DATA语法一致的语法功能会发生变化。
    4. 涉及ALTER TABLE,RENAME TABLE等更改表名的语法,影响场景如下:

      新表名对应字符串开头为“#MySQL50#”,且其后有其他字符,“#MySQL50#”将被忽略;如果新旧表名一致,不会报错。

    5. 支持set names指定collate子句。

默认值:""

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:b_format_version一起设置,在安装部署后立即设置,后期非必要无需变更。

设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。

m_format_dev_version

参数说明:数据库平台迭代小版本兼容性行为配置项。

sql_compatibility兼容性参数设置为M时,m_format_dev_version才会生效。

参数类型:字符串

参数单位:

取值范围:表7中的兼容性配置项。目前只可以设置"s1"。

表7 兼容性配置项

兼容性配置项

兼容性行为控制

s1

影响如下语法:
  1. 禁用SELECT FETCH FIRST ROWS ONLY语法。
  2. 禁用TRUNCATE CASCADE/RESTRICT语法。
  3. 禁用CREATE TABLE中定义主键时指定USING INDEX TABLESPACE tablespace_name语法。
  4. DROP TABLE/VIEW/COLUMN中CASCADE/RESTRIC语法语义改变,改为忽略CASCADE/RESTRIC的语义,且默认行为为RESTRIC。
  5. CREATE TABLE REFERENCES作为列约束时,语法语义改变,改为忽略该外键定义。

默认值:"s1"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:在安装部署后立即设置,后期非必要无需变更。

设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。

sql_mode

参数说明:MYSQL兼容模式下和M-Compatibility模式下SQL行为控制配置项。

  • sql_compatibility兼容性参数设置为MYSQL、b_format_version设置为'5.7'、b_format_dev_version设置为's1'时,sql_mode才会生效;或者sql_compatibility兼容性参数设置为M时生效。
  • 使用SHOW sql_mode和SELECT @@sql_mode进行查询时,会依据REAL_AS_FLOAT、ANSI_QUOTES、ONLY_FULL_GROUP_BY、NO_UNSIGNED_SUBTRACTION、NO_AUTO_VALUE_ON_ZERO、NO_BACKSLASH_ESCAPES、STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ALLOW_INVALID_DATES、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION及PAD_CHAR_TO_FULL_LENGTH的顺序,大写显示,不因设置时的顺序与大小写而改变。

参数类型:字符串

参数单位:

取值范围:

  • MYSQL模式:空字符串""或"strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution,pad_char_to_full_length,no_auto_value_on_zero"中的选项值。
  • M-Compatibility模式:除支持MYSQL模式参数外,还新增了no_unsigned_subtraction、ansi_quotes、allow_invalid_dates、real_as_float、strict_all_tables、traditional。

每个选项值的含义如表8所述。

表8 兼容性配置项

兼容性配置项

兼容性行为控制

MYSQL模式参数配置说明

M-Compatibility模式参数配置说明

strict_trans_tables

当前仅支持对MYSQL兼容数据库和M-Compatibility数据库数据类型及系统函数做校验。

设置时,对输入的参数格式和范围做严格校验。无效值输入或者超过范围时,解析报error。

不设置时,对输入的参数格式和范围做宽松校验,无效值输入或者超过范围时,解析报warning,返回对应数据的0值。

可独立设置和取消。

可独立设置和取消。

only_full_group_by

不允许出现非GROUP BY的key值、且不是常量和聚集函数的投影列。

可独立设置和取消,但无实际作用。

可独立设置和取消。

no_zero_in_date

不允许日期中的年、月、日是0值。

可独立设置和取消,但无实际作用。

可独立设置和取消。

no_zero_date

不允许日期是0值(0000-00-00)。

可独立设置和取消,但无实际作用。

可独立设置和取消。

error_for_division_by_zero

不允许被0除。

可独立设置和取消,但无实际作用。

可独立设置和取消。

no_auto_create_user

无实际作用,仅用作SET SQL_MODE语句包含此选项时不报错的兼容作用。

可独立设置和取消。

可独立设置和取消。

no_engine_substitution

无实际作用,仅用作SET SQL_MODE语句包含此选项时不报错的兼容作用。

可独立设置和取消。

可独立设置和取消。

pad_char_to_full_length

用于表中的char类型列格式化输出,包含时输出带有尾部空格的字符串,否则输出不带尾部空格字符串。

可独立设置和取消。

可独立设置和取消。

no_auto_value_on_zero

包含此选项后,向AUTO_INCREMENT自动增长列插入0值将不会自增。

可独立设置和取消。

可独立设置和取消。

no_unsigned_subtraction

禁止无符号数减法,如果使用无符号整数进行减法操作,且结果为负数,则会返回一个错误。

可独立设置和取消,但无实际作用。

可独立设置和取消。

ansi_quotes

启用ANSI_QUOTES模式,该模式下双引号被视为标识符引用符号,而不是字符串引用符号。在该模式下,如果使用双引号引用表名或列名,则必须使用双引号引用整个名称,而不能使用反引号。

可独立设置和取消,但无实际作用。

可独立设置和取消。

allow_invalid_dates

允许插入无效日期,如果启用该选项,则MySQL将允许插入无效的日期,例如'0000-00-00'。

可独立设置和取消,但无实际作用。

可独立设置和取消。

real_as_float

默认将REAL类型视为DOUBLE类型,如果启用该选项,则将REAL类型视为FLOAT类型。

可独立设置和取消,但无实际作用。

可独立设置和取消。

strict_all_tables

与strict_trans_tables效果一致。

可独立设置和取消。

可独立设置和取消。

traditional

与同时设置strict_trans_tables、strict_all_tables、no_zero_in_date、no_zero_date、error_for_division_by_zero、no_auto_create_user和no_engine_substitution效果一致。

可独立设置和取消。

说明:

具体是否生效取决于MYSQL兼容模式本身是否支持。

可独立设置和取消。

默认值:"strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution"

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

auto_increment_increment

参数说明:AUTO_INCREMENT自动增长列的自增步长,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。

参数类型:整型

参数单位:

取值范围:1 ~ 65535

默认值:1

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据用户需要设置。

设置不当的风险与影响:设置不当会使自增值不符合预期。若参数值小于auto_increment_offset,自动增长列自增时会产生错误。

auto_increment_offset

参数说明:AUTO_INCREMENT自动增长列的起始值,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。

参数类型:整型

参数单位:

取值范围:1 ~ 65535

默认值:1

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:根据用户需要设置。

设置不当的风险与影响:设置不当会使自增值不符合预期。若参数值大于auto_increment_increment,自动增长列自增时会产生错误。

auto_increment_cache

参数说明:对自动增长列批量插入或导入触发自增时,预留自增缓存值的个数。预留自增值时,刷新自增计数器为自增缓存值的最大值,缓存值使用完毕之前,自增计数器值不变,触发自增使用缓存的值。

  • 预留的缓存值仅在语句内有效,若预留的自增缓存值没有全部被使用,后续插入语句基于自增计数器触发自增,会出现表中自动增长列的值不连续的情况。
  • 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。
  • 对已有数据的表添加自动增长列或修改某列为自动增长列时,已有数据触发自增,预留自增缓存值也受此参数影响。
  • 此参数不影响本地临时表中的自动增长列。

参数类型:整型

参数单位:

取值范围:0 ~ 2147483647

  • 参数值为0时,自动预留自增缓存值。
    • 第一次触发自增时,若已知即将插入自动增长列的行数,预留已知数量的值。
      • 例如:“INSERT INTO table SELECT ...”和COPY FROM触发自增值无法获取即将插入的行数。ALTER TABLE命令表数据重写时,若触发自增,使用统计信息中的reltuples作为即将预留的行数。 “INSERT INTO table VALUES(...),(...),...”由于要分布到不同DN,在某些执行计划中,DN获取不到即将插入的行数。
    • 若行数未知,每次预留2^n个值,例如,第一次自增预留1个值,第二次自增预留2个值,第三次预留4个值,第四次预留8个值,以此类推,若预留值个数超过65535,预留65535个值。
  • 参数值不为0时,预留缓存值的数量为参数值。
    • 第一次触发自增时,若已知即将插入自动增长列的行数,预留已知数量的值。
    • 若行数未知,每次预留auto_increment_cache数量的自增值。

默认值:0

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值,若默认情况产生自增值不连续的情况,可以根据用户即将批量插入数据量调整参数值。

设置不当的风险与影响:参数值越大,批量插入性能越优,也更可能产生不连续的自增值。

disable_keyword_options

参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。设置该参数的标识符将不会作为关键字使用。

参数类型:字符串

参数单位:

取值范围:

  • 非M-Compatibility模式数据库下,支持设置以下关键字:advanced、auto_increment、change、charset、columns、colview、compile、completion、containing、convert、csn、datetime、days、db4aishot、dbtimezone、delete_all、disable_all、discard_path、distributed、dumpfile、enable_all、ends、entityescaping、escaped、evalname、event、events、expdp、finish、gsiusable、gsivalid、gsiwaitall、high、ifnull、ilm、ilm_pidx_list、imcvtable、impdp、invisible、json_object、lines、link、lnnvl、load_discard、locked、low、mark、modification、months、nocache、nocolview、noentityescaping、noextend、noscale、nvl2、ordinality、outfile、performance、pivot、populate、priority、public、recover、regexp、regexp_like、rlike、scale、schedule、separator、sessiontimezone、shrink、slave、specification、starting、starts、subpartitions、substr、unpivot、verify、visible、wellformed、xmltype、years、zerofill。
  • M-Compatibility模式数据库下,支持设置以下关键字:active、admin、array、authentication、buckets、bulk、challenge_response、clone、colview、component、cume_dist、definition、dense_rank、description、empty、enforced、engine_attribute、except、exclude、factor、failed_login_attempts、finish、first_value、following、force、generate、geomcollection、get_master_public_key、get_source_public_key、grouping、groups、gtid_only、high、histogram、history、imcvtable、inactive、initial、initiate、intersect、invisible、json_table、json_value、keyring、lag、last_value、lateral、lc_collate、lead、least、load_bad、load_discard、location、locked、low、master_compression_algorithms、master_public_key_path、master_tls_ciphersuites、master_zstd_compression_level、match、member、minvalue、move、nested、nocolview、nocycle、node、nomaxvalue、nominvalue、nowait、nth_value、ntile、nulls、nvl、nvl2、of、off、oids、oj、old、operator、optional、ordinality、organization、others、over、owned、password_lock_time、path、percent_rank、persist、persist_only、populate、preceding、prepared、priority、privilege_checks_user、process、random、rank、recursive、recyclebin、reference、registration、reindex、reject、relative、replica、replicas、require_row_format、resource、respect、restart、retain、returning、reuse、role、row_number、scroll、secondary、secondary_engine、secondary_engine_attribute、secondary_load、secondary_unload、sequence、setof、shippable、size、skip、slice、smalldatetime、smalldatetime_format、source_auto_position、source_bind、source_compression_algorithms、source_connect_retry、source_delay、source_heartbeat_period、source_host、source_log_file、source_log_pos、source_password、source_port、source_public_key_path、source_retry_count、source_ssl、source_ssl_ca、source_ssl_capath、source_ssl_cert、source_ssl_cipher、source_ssl_crl、source_ssl_crlpath、source_ssl_key、source_ssl_verify_server_cert、source_tls_ciphersuites、source_tls_version、source_user、source_zstd_compression_level、split、srid、stable、stdin、stdout、stream、strict、substring、sysdate、system、thread_priority、ties、tls、trim、unbounded、unregister、unusable、url、vacuum、valid、varchar2、vcpu、verbose、version、visible、window、within、xmlattributes、xmlconcat、xmlelement、xmlforest、xmlpi、xmlroot、xmltype、zone。

默认值:

  • 非M-Compatibility模式数据库下:"datetime,regexp,rlike,zerofill"。
  • M-Compatibility模式数据库下:""。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:该参数打开后,作为关键字使用的部分功能会失效,请谨慎使用。如果要屏蔽的关键字在当前兼容模式数据库的待屏蔽关键字数组里不存在,其他兼容模式数据库里存在时,则产生WARNING;如果其他兼容模式数据库里也不存在则产生ERROR。

MYSQL兼容模式下,datetime、regexp、rlike、zerofill是否作为保留关键字由系统确定,用户无法修改和删除。具体情况为:初始状态下系统会将datetime、regexp、rlike、zerofill添加到参数disable_keyword_options中,此时datetime、regexp、rlike、zerofill不作为保留关键字;设置set b_format_version = '5.7'和set b_format_dev_version = 's1';(或者高于s1的版本)后,系统会将datetime、regexp、rlike、zerofill从参数disable_keyword_options中删除,此时可作为保留关键字使用。

disable_plsql_keyword_options

参数说明:用于将设置的标识符当作非关键字使用。数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。

参数类型:字符串

参数单位:

取值范围:支持的配置项包括PIPE、PIPELINED、RANGE、REPLACE、SUBTYPE。

默认值:""

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  • 该参数打开后,作为关键字使用的部分功能会失效,请谨慎使用。
  • 如需取消屏蔽plsql关键字功能,请将该参数设置为空值。

plpgsql.variable_conflict

参数说明设置同名的存储过程变量和表的列的使用优先级。

参数类型:字符串

参数单位:

取值范围

  • error:表示遇到存储过程变量和表的列名同名则编译报错。
  • use_variable:表示存储过程变量和表的列名同名则优先使用变量。
  • use_column:表示存储过程变量和表的列名同名则优先使用列名。

默认值error

设置方式:该参数属于USERSET类型参数,仅支持表1中对应设置方法3进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

td_compatible_truncation

参数说明:控制是否开启与Teradata数据库相应兼容的特征。在用户连接上与TD兼容的数据库时,可以将该参数设置成为on(即超长字符串自动截断功能启用),该功能启用后,在后续的insert语句中,对目标表中char和varchar类型的列插入超长字符串时,会按照目标表中相应列定义的最大长度对超长字符串进行自动截断。保证数据都能插入目标表中,而不是报错。

  • 超长字符串自动截断功能不适用于insert语句包含外表的场景。
  • 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示打开超长字符串自动截断功能。
  • off:表示关闭超长字符串自动截断功能。

默认值:off

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

uppercase_attribute_name

参数说明:设置列名以大写形式返回给客户端。该参数仅限于ORA兼容模式下使用。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示列名以大写形式返回给客户端。
  • off:表示列名不以大写形式返回给客户端。

默认值:off

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_object_special_character

参数说明:控制执行CREATE EXTENSION语句时,若脚本文件中使用"@extschema@",此时control文件中schema参数的值是否可以包含["$'\]中任意特殊字符。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,可以包含["$'\]中任意特殊字符。
  • off:表示关闭,不可以包含["$'\]中任意特殊字符。

默认值:off

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:扩展功能为内部使用功能,不建议用户使用。

设置不当的风险与影响:修改该参数取值可能导致集群出现意料之外的结果,请保持默认值。

enable_implicit_cast_str2num

参数说明:在整型数据类型与字符串数据类型进行比较操作符或者算术运算操作符运算时,控制字符串是否能够转换为NUMERIC。

仅在a_format_version='10c',a_format_dev_version='s1'时生效。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,

    比较操作符(>、>=、<、<=、=、<>):字符串数据类型会被隐式转换成NUMERIC类型。

    算术操作符(+、-、*、/、%、^):整型数据类型和字符串数据类型都会被隐式转换成NUMERIC类型。

  • off:表示关闭,字符串数据类型会被隐式转换成整型数据类型。

默认值:on

设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

a_format_disable_func

参数说明:禁用指定的系统函数。该参数的值由若干个系统函数OID值用逗号隔开组成。设置该参数的系统函数将不能被调用。当某一系统函数不能满足用户需求并且需要使用相同函数名的自定义函数时,可使用该功能。

参数类型:字符串

参数单位:

取值范围:字符串,由若干个系统函数OID值用逗号隔开组成。

默认值:""

设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_convert_illegal_char

参数说明对输出结果中的非法编码是否不进行校验并以占位符替换显示。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,非法编码将替换为convert_illegal_char_mode参数指定符号的编码。
  • off:表示关闭,查询结果中包含的非法编码会校验后报错。

默认值off

设置方式该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议推荐使用默认值,仅在数据中存在特殊字符且需要对特殊字符进行强制不报错处理时开启该参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  1. 当数据库字符集为utf8、zhs16gbk、gb18030、gb18030-2022、latin1,enable_convert_illegal_char=on时生效,且当数据库客户端与服务端字符集不相同时,非法编码将以占位符形式显示。
  2. 特殊字符范围:本文所指的特殊字符范围仅包括完全异常编码和混合编码,不支持\u0000字符。若字符编码中包含\u0000字符,在使用时通常会在\u0000处截断,无法保证数据的完整性。
  3. 若数据库客户端与服务端字符集不相同,在enable_convert_illegal_char=off时,数据库将超出当前字符集编码外的特殊字符(不包含\x0000字符)替换为\x3F(即显示为?)编码写入数据库中;当enable_convert_illegal_char=on时,只能使用函数dbe_raw.cast_to_varchar2()将非法编码原编码插入数据库中,并以占位符形式显示。
  4. 当开启GUC参数时,特殊字符在下表所列的函数、高级包函数中的表现为:
    • 在客户端与服务端字符集一致时,特殊字符在查询时不报错,与开启GUC参数前的行为保持一致。
    • 在客户端与服务端字符集不一致时,特殊字符在查询时显示为占位符(默认为?)。
    • 不建议客户使用函数处理包含特殊字符的字符串,下表所列函数处理包含特殊字符的字符串不会产生报错,但不保证结果的正确性。
表9 特殊字符支持的函数及高级包函数

序号

函数名/高级包函数名

1

bit_length(string)

2

btrim(string text [, characters text])

3

char_length(string)

character_length(string)

4

chr(cvalue int|bigint)

chr(integer)

5

concat(str1,str2)

6

concat_ws(sep text, str"any" [, str"any" [, ...] ])

7

decode(string text, format text)

8

dump(expr[, return_fmt [, start_position [, length ] ] ])

9

encode(data bytea, format text)

10

find_in_set(text, set)

11

format(formatstr text [, str"any" [, ...] ])

12

left(str text, n int)

13

length(string)

14

lengthb(text/bpchar)

15

ltrim(string [, characters])

16

md5(string)

17

notlike(x bytea name text, y bytea text)

18

octet_length(string)

19

overlay(string placing string FROM int [for int])

20

quote_ident(string text)

21

quote_literal(string text)

22

quote_nullable(string text)

23

rawcat(raw,raw)

24

regexp_count(string text, pattern text [, position int [, flags text]])

25

regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]])

26

regexp_like(source_string, pattern [, match_parameter])

regexp_like(text,text,text)

27

regexp_matches(string text, pattern text [, flags text])

28

regexp_replace(string, pattern, replacement [,flags ])

29

regexp_split_to_array(string text, pattern text [, flags text ])

30

regexp_split_to_table(string text, pattern text [, flags text])

31

regexp_substr(source_char, pattern)

regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]])

32

repeat(string text, number int )

33

repexp_replace(string text, pattern text [, replacement text [, position int [, occurrence int [, flags text]]]])

34

replace(string text, from text, to text)

35

replace(string, substring)

36

reverse(str)

37

right(str text, n int)

38

rtrim(string [, characters])

39

sha(string)

40

sha1(string)

41

sha2(string,hash_length)

42

split_part(string text, delimiter text, field int)

43

substring(string [from int] [for int])

substring(string from pattern for escape)

substring(string from pattern)

44

substring_inner(string [from int] [for int])

45

tconvert(key text, value text)

46

to_single_byte(char)

47

translate(string text, from text, to text)

48

trim([leading |trailing |both] [characters] from string)

49

unistr(string)

50

vsize(expr)

51

PKG_UTIL.RAW_CAST_FROM_VARCHAR2

52

PKG_UTIL.LOB_CONVERTTOCLOB

53

PKG_UTIL.LOB_RAWTOTEXT

54

PKG_UTIL.LOB_TEXTTORAW

55

PKG_UTIL.RAW_CAST_TO_VARCHAR2

56

DBE_OUTPUT.PUT

57

DBE_OUTPUT.PUT_LINE

fix_func_selection

参数说明:是否优化函数匹配策略。

catlist顺序问题:若用户自定义函数与系统函数存在冲突,数据库系统在选择函数时,会受该系统函数在数据库系统中的注册顺序影响,从而导致选择函数结果不同。

参数类型:字符串

参数单位:

取值范围:""、"catlist"。

  • "":不进行优化,与505.1.0版本之前的版本保持一致。
  • "catlist":优化catlist顺序问题,始终优先选择系统函数并执行。

默认值:

  • "catlist":新安装的数据库的默认值。
  • "":505.1.0版本之前的数据库升级后的默认值。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

max_allowed_packet

参数说明:M-Compatibility模式数据库行为配置项,用于表示字符串函数返回值上限。若实际结果超过该上限,则会告警,并返回NULL值。

参数类型:整型

参数单位:字节

取值范围:1024 ~ 1073741824(取值只能是1024的倍数,非倍数时将向下舍入到最接近的倍数)。

默认值:4194304

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

div_precision_increment

参数说明:M-Compatibility模式数据库行为配置项。用于设置除法结果的精度提升值,即除法运算结果的小数位数等于被除数的小数位数加上该参数值。

参数类型:整型

参数单位:

取值范围:0 ~ 30

默认值:4。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

enable_m_format_hook

参数说明:M-Compatibility模式数据库行为配置项。该参数控制M-Compatibility模式hook是否生效。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示M-Compatibility模式数据库允许挂载对应解析执行hook。
  • off:表示M-Compatibility模式数据库不挂载对应解析执行hook。

默认值:on

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:当前参数仅针对当前未完全适配的外部工具使用,不允许用户使用。

设置不当的风险与影响:

gs_format_behavior_compat_options

参数说明:gs_format_behavior_compat_options用于选择GaussDB内部系统函数配置项。

参数类型:字符串

参数单位:

取值范围:当前只支持表10中的兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。

默认值:"sqrt_karatsuba"

表10 gs_format_behavior兼容性配置项

兼容性配置项

兼容性行为控制

sqrt_karatsuba

  • 设置此参数:表示在调用sqrt平方根函数时,使用Karatsuba平方根算法,karatsuba算法性能更高但是在极少数情况下精度可能会和牛顿迭代算法不一致。
  • 不设置此参数:在计算sqrt平方根算法时,会使用默认的牛顿迭代算法进行平方根的计算。

allow_textconcat_null

  • 设置此参数:在PG兼容模式下,字符串和null值拼接会返回对应的字符串的值。
    -- 在PG兼容模式下执行
    gaussdb=# set gs_format_behavior_compat_options='allow_textconcat_null';
    SET
    gaussdb=# select 'a' || null || 'b';
     ?column?
    ----------
     ab
    (1 row)
    
  • 不设置此参数:在PG兼容模式下,字符串和null值拼接会返回NULL。

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:控制一些兼容性特性是否可用,若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

support_zero_character

参数说明当数据中包含Unicode编码为\u0000的字符(以下简称0字符)时,数据库是否取消对0字符的校验并且正确处理而不进行截断操作。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,数据库取消对0字符的校验,能够正确插入和处理0字符,使数据在处理过程中不发生截断。
  • off:表示关闭,数据库保留对0字符的校验,部分函数在处理0字符时会发生报错或数据截断。

默认值off

设置方式该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议推荐使用默认值,仅在数据中存在0字符且需要对0字符进行正确处理时开启该参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  1. 该参数仅在数据库兼容性为ORA兼容模式且所有节点都设置为support_zero_character=on时生效。
  2. 如果需要向数据库中写入0字符,需确认support_zero_character=on生效,0字符数据才能正常插入并存储。
  3. 当support_zero_character=on时,如果数据类型为CHAR(n)、CHARACTER(n)、NCHAR(n)、VARCHAR(n)、CHARACTER VARYING(n)、VARCHAR2(n)、NVARCHAR2(n)、TEXT或CLOB类型,数据库可以正确插入并处理0字符;如果包含0字符的字符串数据可以显式转换为JSON/JSONB、XML、XMLTYPE、数值类型、货币类型、时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、HLL类型、范围类型、对象标识符类型、账本数据库类型、aclitem类型或向量类型时,会在0字符处发生截断;如果字符串类型显式转换为UUID类型时,会在0字符处发生报错。
  4. 数据库仅支持以下写入0字符的方式:
    • 通过JDBC连接数据库时,0字符可以通过文本方式写入数据库。
    • 通过dbe_raw.cast_to_varchar2函数直接将0字符编码写入数据库。
    • 通过copy/gs_loader工具将0字符编码写入数据库。
  5. 在开启GUC参数时,不同字符集之间进行转换时,0字符会直接返回,不再发生报错。
  6. gsql客户端版本应与数据库版本匹配,在开启GUC参数时,若gsql端接收的数据中包含0字符,gsql工具会将0字符转换为空格后进行打印输出。若使用旧版本gsql连接数据库,包含0字符的数据仍存在显示被截断的情况。
  7. 当开启GUC参数时,0字符在表11所列的函数、高级包函数中的表现为:函数能够正常处理0字符,不会发生在0字符处截断的情况。
  8. 部分高级包接口入参为Schema名或object名,理论上不能含有0字符,因此对表12中的函数添加0字符校验,当入参包含0字符时进行报错处理(原表现为0字符后数据被截断)。
  9. 当support_zero_character=on时,若处理的数据中不包含0字符,函数性能无明显劣化;若处理的数据中包含0字符,对比相同数量的有效字符时,initcap、upper、lower、nls_upper和nls_lower函数性能劣化程度与数据中0字符个数紧密相关,即0字符个数越多,性能劣化越严重。
  10. 当support_zero_character=on时,若逻辑解码工具读取到数据中包含的0字符,则会将0字符转换为空格后进行打印输出(原表现为0字符后数据被截断)。
表11 0字符支持的系统函数和高级包函数列表

序号

函数名/高级包函数名

1

btrim(string text [, characters text])

2

char_length(string) 或 character_length(string)

3

chr(cvalue int|bigint)

4

chr(integer)

5

coalesce(expr1, expr2, ..., exprn)

6

concat(str1,str2)

7

concat_ws(sep text, str"any" [, str"any" [, ...] ])

8

convert(string bytea, src_encoding name, dest_encoding name)

9

convert_from(string bytea, src_encoding name)

10

convert_to(string text, dest_encoding name)

11

decode(base_expr, compare1, value1, Compare2,value2, … default)

12

dump(expr[, return_fmt [, start_position [, length ] ] ])

13

encode(data bytea, format text)

14

format(formatstr text [, str"any" [, ...] ])

15

greatest(expr1 [, ...])

16

group_concat([DISTINCT | ALL] expression [,expression ...] [ORDER BY { expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ] } [,...]] [SEPARATOR str_val])

17

initcap(string)

18

instr(string,substring[,position,occurrence])

instr(text,text,int,int)

19

instrb(text,text,int,int)

20

least(expr1 [, ...])

21

left(str text, n int)

22

length(string)

length(string bytea, encoding name )

23

lengthb(text/bpchar)

24

listagg(expression [, delimiter]) WITHIN GROUP(ORDER BY order-list)

25

lower(string)

26

lpad(string text, length int [, fill text])

27

ltrim(string [, characters])

28

nls_lower(string [, nlsparam])

29

nls_upper(string [, nlsparam])

30

nullif(expr1, expr2)

31

nvl( expr1 , expr2 )

32

nvl2( expr1 , expr2,expr3 )

33

overlay(string placing string FROM int [for int])

34

position(substring in string)

35

quote_nullable(string text)

36

regexp_count(string text, pattern text [, position int [, flags text]])

37

regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]])

38

regexp_like(text,text,text)

regexp_like(source_string, pattern [, match_parameter])

39

regexp_matches(string text, pattern text [, flags text])

40

regexp_replace(string, pattern, replacement [,flags ])

41

regexp_split_to_array(string text, pattern text [, flags text ])

42

regexp_split_to_table(string text, pattern text [, flags text])

43

regexp_substr(source_char, pattern)

regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]])

44

repeat(string text, number int )

45

replace(string text, from text, to text)

replace(string, substring)

46

reverse(str)

47

right(str text, n int)

48

rpad(string text, length int [, fill text])

49

rtrim(string [, characters])

50

similar_escape(pat text, esc text)

51

split_part(string text, delimiter text, field int)

52

string [NOT] LIKE pattern [ESCAPE escape-character]

53

string || string 或 string || non-string 或 non-string || string

54

string_agg(expression, delimiter)

55

strpos(string, substring)

56

substr(string,from)

substr(bytea,from,count)

substr(string,from,count)

57

substrb(text,int)

substrb(text,int,int)

58

substring(string [from int] [for int])

substring(string from pattern for escape)

substring(string from pattern)

substring_inner(string [from int] [for int])

59

translate(string text, from text, to text)

60

trim([leading |trailing |both] [characters] from string)

61

unistr(string)

62

upper(string)

63

PKG_UTIL.LOB_GET_LENGTH

64

PKG_UTIL.LOB_READ

65

PKG_UTIL.LOB_WRITE

66

PKG_UTIL.LOB_APPEND

67

PKG_UTIL.LOB_COMPARE

68

PKG_UTIL.LOB_MATCH

69

PKG_UTIL.LOB_READ_HUGE

70

PKG_UTIL.LOB_WRITEAPPEND_HUGE

71

PKG_UTIL.LOB_APPEND_HUGE

72

PKG_UTIL.LOB_COPY_HUGE

73

PKG_UTIL.LOB_CONVERTTOBLOB_HUGE

74

PKG_UTIL.IO_PRINT

75

PKG_UTIL.RAW_CAST_FROM_VARCHAR2

76

PKG_UTIL.FILE_READ

77

PKG_UTIL.FILE_READLINE

78

PKG_UTIL.APP_READ_CLIENT_INFO

79

PKG_UTIL.APP_SET_CLIENT_INFO

80

PKG_UTIL.LOB_CONVERTTOBLOB

81

PKG_UTIL.LOB_CONVERTTOCLOB

82

PKG_UTIL.MATCH_EDIT_DISTANCE_SIMILARITY

83

PKG_UTIL.RAW_CAST_TO_VARCHAR2

84

PKG_UTIL.APP_SET_MODULE

85

PKG_UTIL.APP_READ_MODULE

86

PKG_UTIL.APP_SET_ACTION

87

PKG_UTIL.APP_READ_ACTION

88

DBE_OUTPUT.PRINT_LINE

89

DBE_OUTPUT.PRINT

90

DBE_OUTPUT.GET_LINE

91

DBE_OUTPUT.GET_LINES

92

DBE_OUTPUT.PUT

93

DBE_OUTPUT.PUT_LINE

94

DBE_UTILITY.CANONICALIZE

95

DBE_UTILITY.COMMA_TO_TABLE

96

DBE_UTILITY.NAME_TOKENIZE

97

DBE_UTILITY.TABLE_TO_COMMA

98

DBE_UTILITY.CANONICALIZE_RET

99

DBE_UTILITY.COMMA_TO_TABLE_FUNC

100

DBE_UTILITY.NAME_SEPARATE

101

DBE_UTILITY.NAME_TOKENIZE_FUNC

102

DBE_UTILITY.NAME_TOKENIZE_LOWER

103

DBE_UTILITY.NAME_TOKENIZE_LOWER_FUNC

104

DBE_UTILITY.TABLE_TO_COMMA_FUNC

表12 入参包含0字符进行报错处理的函数

序号

高级包函数名

1

PKG_UTIL.SESSION_SET_CONTEXT

2

PKG_UTIL.UTILITY_COMPILE_SCHEMA

3

PKG_UTIL.GS_COMPILE_SCHEMA

4

DBE_UTILITY.NAME_RESOLVE

5

DBE_UTILITY.COMPILE_SCHEMA

6

DBE_UTILITY.SEARCH_CLASS_WITH_NSPOID_ONAME_TYPE

7

DBE_UTILITY.SEARCH_OBJECTS

8

DBE_UTILITY.SEARCH_OBJECTS_SYNONYM_FILL_SCHEMA

9

DBE_UTILITY.SEARCH_PROCEDURE_WITH_NSPOID_ONAME

10

DBE_UTILITY.SEARCH_SYNONYM_WITH_NSPOID_ONAME

enable_case_intervaltonumeric

参数说明控制CASE语句中是否支持INTERVAL转换为NUMERIC,该参数仅在ORA兼容模式下生效。

参数类型:布尔型

参数单位:

取值范围

  • on:CASE语句中支持INTERVAL转换为NUMERIC。
  • off:CASE语句中不支持INTERVAL转换为NUMERIC。

默认值off

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值

设置不当的风险与影响:若设置为on,后续修改为off,可能导致现有CASE语句报错。

enable_ecpg_cursor_duplicate_operation

参数说明ECPG控制在ORA兼容下是否支持重复打开/关闭游标,仅在ECPG连接ORA兼容数据库时生效。

参数类型:布尔型

参数单位:

取值范围

  • on:ECPG连接ORA兼容数据库时,支持重复打开/关闭游标。
  • off:ECPG连接ORA兼容数据库时,不支持重复打开/关闭游标。

默认值on

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值

设置不当的风险与影响:若设置为off,重复打开/关闭游标时会报错。

直接安装本版本数据库时,该参数值为on。从老版本升级到当前版本时,该参数值为off。

format_pg_to_timestamp

参数说明在PG模式下,控制to_timestamp(string [, fmt])函数的行为。开启后,如果有不支持的格式,自动跳过,当前版本不支持FF,FF7,FF8,FF9,RR,RRRR,SYYYY,x,X等格式;支持早于294277-01-01 00:00:00之前的时间日期和负数年份(转化成公元前);FF1-FF6会把超出精确度的毫秒四舍五入;当时间日期中相同项冲突时(例如DDD和DD所指的天数不同时)返回一个格式正确的时间不会报错,具体冲突行为如表13所示。

参数类型:布尔型

参数单位:

取值范围

  • on:实现上述功能。
  • off:取消实现上述功能。

默认值on

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值。

设置不当的风险与影响:开启会导致GaussDB不支持的fmt失效。

表13 to_timestamp fmt冲突

模式

描述

SSSSS与时间冲突

保留时间(分钟,小时)中的值以及SSSSS中的秒数部分的值。

W,J与时间日期冲突

优先级:J,W,mmdd按顺序进行覆盖。

W:未指定时,默认为星期三。

默认行为:W覆盖mmdd。

SSSSS与SS冲突

保留SS,舍弃SSSSS。

DDD与日期冲突

舍弃DDD。

synonym_priv_strict_check

参数说明控制通过同义词搜索对象时,是否检查同义词关联对象的访问权限。

参数类型:布尔型

参数单位:

取值范围

  • on:通过同义词检索对象时,检查是否具有同义词关联对象的访问权限。
  • off:通过同义词检索对象时,不检查是否具有同义词关联对象的访问权限。

默认值on。

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值

设置不当的风险与影响:若设置为off,通过同义词访问对象时,不检查对象的访问权限,可能构成越权风险。

直接安装505.2.0版本数据库时,该参数值为on。从505.2.0之前版本升级到当前版本时,该参数值为off。

forbid_public_funcname_same_with_sysfunc

参数说明控制在创建函数及RENAME函数时,是否禁止PUBLIC函数与pg_catalog下的系统函数名称相同。

参数类型:布尔型

参数单位:

取值范围

  • on:创建函数及RENAME函数时,禁止PUBLIC函数与pg_catalog下的系统函数名称相同。
  • off:创建函数及RENAME函数时,允许PUBLIC函数与pg_catalog下的系统函数名称相同。

默认值on。

设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。

设置建议:推荐使用默认值

设置不当的风险与影响:若设置为off,允许public函数与pg_catalog下的系统函数名称相同。

直接安装505.2.0版本数据库时,该参数值为on。从505.2.0之前版本升级到当前版本时,该参数值为off。

相关文档