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

平台和客户端兼容性

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

a_format_date_timestamp

参数说明控制返回的日期时间。在A模式下,当事务开启时,函数current_date()、current_timestamp()、localtimestamp()返回当前SQL启动的时间戳。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

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

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

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

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

convert_string_to_digit

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

参数类型:布尔型

参数单位:

取值范围:

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

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

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

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

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

character_set_connection

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

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

参数类型:字符串

参数单位:

取值范围:

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

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

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

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

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

collation_connection

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

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

参数类型:字符串

参数单位:

取值范围:

  • sql_compatibility='B'兼容性模式下支持的字符集,请参见《开发指南》中“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含义一致。

参数类型:字符串

参数单位:

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

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

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

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

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

character_set_database

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

参数类型:字符串

参数单位:

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

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

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

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

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

在M-Compatibility模式下生效。

collation_database

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

参数类型:字符串

参数单位:

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

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

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

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

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

在M-Compatibility模式下生效。

character_set_server

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

参数类型:字符串

参数单位:

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

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

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

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

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

在M-Compatibility模式下生效。

collation_server

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

参数类型:字符串

参数单位:

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

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

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

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

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

在M-Compatibility模式下生效。

character_set_results

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

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

参数类型:字符串

参数单位:

取值范围:

  • sql_compatibility='B'兼容性模式下支持的字符集,请参见《开发指南》中“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

参数说明设置时间戳默认格式。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围字符串

默认值"DD-Mon-YYYY HH:MI:SS.FF AM"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

nls_timestamp_tz_format

参数说明设置带时区时间戳默认格式。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围字符串

默认值"DD-Mon-YYYY HH:MI:SS.FF AM"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

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

nls_nchar_characterset

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

参数类型字符串

参数单位

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

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

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

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

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

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

group_concat_max_len

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

参数类型:整型

参数单位:

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

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

设置方式:该参数属于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

参数说明:嵌套子程序的最大嵌套深度。该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:0 ~ 100

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

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

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

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

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

transform_null_equals

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

参数类型:布尔型

参数单位:

取值范围:

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

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

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

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

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

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

support_extended_features

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

参数类型:布尔型

参数单位:

取值范围:

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

默认值:off

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

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

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

sql_compatibility

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

参数类型:枚举类型

参数单位:

取值范围:

  • A:表示同O数据库兼容。
  • B:表示同MY数据库兼容。
  • C:表示同TD数据库兼容。
  • PG:表示同POSTGRES数据库兼容。
  • M:表示M-Compatibility。

默认值:A

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

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

设置不当的风险与影响:

  • 该参数只能在执行CREATE DATABASE命令(详见《开发指南》的“SQL参考 > SQL语法 > CREATE DATABASE”章节)创建数据库的时候设置。
  • 在数据库中,该参数只能是确定的一个值,要么始终设置为A,要么始终设置为B,请勿任意改动,否则会导致数据库行为不一致。

b_format_behavior_compat_options

参数说明:数据库B模式兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表1 B模式兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开,例如:set b_format_behavior_compat_options="enable_set_variables,set_session_transaction";。

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

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

表1 B模式兼容性配置项

兼容性配置项

兼容性行为控制

enable_set_variables

set语法增强控制开关。

  • 不设置此配置时,不支持set自定义变量、set [global | session]语法。
  • 设置此配置时,支持B兼容模式下使用上述语法,比如 set @v1 = 1;

set_session_transaction

set session transaction控制开关。

  • 不设置此配置时,set session transaction等效于set local transaction。
  • 设置此配置时,支持B兼容模式下使用上述语法,修改当前会话事务特性。

enable_modify_column

ALTER TABLE MODIFY语义控制开关。

  • 不设置此配置时,“ALTER TABLE table_name MODIFY column_name data_type;”只修改列的数据类型。
  • 设置此配置时,“ALTER TABLE table_name MODIFY column_name data_type;”修改整个列定义。

default_collation

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

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

all

打开所有语法控制开关。

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

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

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

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

m_format_behavior_compat_options

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

参数类型:字符串

参数单位:

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

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

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

兼容性配置项

兼容性行为控制

enable_escape_string

转义符控制开关。

  • 不设置此配置项时,转义符行为受GaussDB转义符相关的GUC参数standard_conforming_stringsescape_string_warningbackslash_quote控制。
  • 设置此配置项时,默认支持除'\0'外的所有MySQL转义符,且gsql客户端中'\b', '\r'和'\Z'回显行为会发生改变,与MySQL客户端保持一致。

enable_conflict_funcs

冲突函数控制开关。

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

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。
      m_db=# set m_format_behavior_compat_options='select_column_name,enable_escape_string';
      SET
      m_db=# select "abc\tdef";
       abc     def 
      -------------
       abc     def
      (1 row)
      
      m_db=# set m_format_behavior_compat_options='select_column_name';
      SET
      m_db=# select "abc\tdef";
       abc\tdef 
      ----------
       abc\tdef
      (1 row)
    • 列名超过63个字符时,会截断后面部分。
    • 表达式最后的部分为注释时,则不会显示最后的注释以及与注释相连的空格。
      m_db=# SELECT 123        /* 456 */;
       123 
      -----
       123
      (1 row)
    • 表达式为布尔值时,无论输入大小写,回显为TRUE或FALSE。
      m_db=# SELECT true;
       TRUE 
      ------
       t
      (1 row)
    • 表达式为null时,无论输入大小写,回显为NULL。
      m_db=# SELECT null;
       NULL 
      ------
      
      (1 row)
    • 表达式包含-时,会将全部的输入作为列名输出。
      m_db=# SELECT (+-+1);
       (+-+1) 
      --------
           -1
      (1 row)
      
      m_db=# SELECT -true;
       -true 
      -------
          -1
      (1 row)
      
      m_db=# SELECT -null;
       -null 
      -------
      
      (1 row)

enable_precision_decimal

支持数据类型精度。

  • 不设置此配置项时:
    • CREATE TABLE SELECT语句只支持SELECT表的列,不支持表达式、函数、常量,以及union场景(因为涉及结果类型推导)。
  • 设置此配置项时:
    • CREATE TABLE SELECT语句不受限制上面描述的场景限制。

enable_load_data_remote_transmission

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

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

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

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

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

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

在未开启精度传递参数(m_format_behavior_compat_options不开启enable_precision_decimal选项)情况下创建的索引在开启精度传递参数后会发生失效,如果打开精度传递时需要重新创建索引。

behavior_compat_options

参数说明:数据库兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

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

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

表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时DBnode端的内存消耗,保证analyze性能的稳定性。

bind_schema_tablespace

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

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

bind_procedure_searchpath

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

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

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

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

correct_to_number

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

  • 若不设置此配置项,则to_number()函数结果默认与A数据库保持一致。
    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类型结果兼容性的配置项。由于B数据库无variadic类型,所以该选项对B数据库无影响。

  • 若不设置此配置项,当concat函数参数为variadic类型时,默认A数据库和C数据库兼容模式下结果相同,且与A数据库保持一致。
    1
    2
    3
    4
    5
    gaussdb=# select concat(variadic NULL::int[]) is null;
     ?column? 
    ----------
     t
    (1 row)
    
  • 若设置此配置项,当concat函数参数为variadic类型时,保留A数据库和C数据库兼容模式下不同的结果形式。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    --A数据库下:
    gaussdb=# select concat(variadic NULL::int[]) is null;
     ?column? 
    ----------
     t
    (1 row)
    --C数据库下:
    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参数的值为A时生效,并且开启该参数后无论是隐式转换、显式转换还是通过调用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;

rownum_type_compat

控制ROWNUM的类型,ROWNUM默认类型为BIGINT,设置此参数后,ROWNUM类型变更为NUMERIC类型。

gaussdb=# set behavior_compat_options='';
gaussdb=# create table tb_test(c1 int,c2 varchar2,c3 varchar2);
gaussdb=# insert into tb_test values(1,'a','b');
gaussdb=# create or replace view v_test as select rownum from tb_test;
gaussdb=# \d+ v_test
                View "public.v_test"
 Column |  Type  | Modifiers | Storage | Description 
--------+--------+-----------+---------+-------------
 rownum | bigint |           | plain   | 
View definition:
 SELECT ROWNUM AS "rownum"
   FROM tb_test;

gaussdb=# set behavior_compat_options = 'rownum_type_compat';
gaussdb=# create or replace view v_test1 as select rownum from tb_test;
gaussdb=# \d+ v_test1
                View "public.v_test1"
 Column |  Type   | Modifiers | Storage | Description 
--------+---------+-----------+---------+-------------
 rownum | numeric |           | main    | 
View definition:
 SELECT ROWNUM AS "rownum"
   FROM tb_test;

gaussdb=# drop view v_test;
gaussdb=# drop view v_test1;
gaussdb=# drop table tb_test;

aformat_null_test

控制rowtype类型判空逻辑。

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

设置此项时,对于rowtype is not null的判断逻辑为当一行数据有一列不为空的时候返回true;不设置此项时,对于rowtype is not null的判断逻辑为当一行数据所有列不为空的时候返回true。该参数不影响rowtype is null的判断。

gaussdb=# set behavior_compat_options='aformat_null_test';
gaussdb=# select r, r is null as isnull, r is not null as isnotnull from (values (1,row(1,2)), (1,row(null,null)), (1,null), (null,row(1,2)), (null,row(null,null)), (null,null) ) r(a,b);
      r      | isnull | isnotnull 
-------------+--------+-----------
 (1,"(1,2)") | f      | t
 (1,"(,)")   | f      | t
 (1,)        | f      | t
 (,"(1,2)")  | f      | t
 (,"(,)")    | f      | t
 (,)         | t      | f
(6 rows)
gaussdb=# set behavior_compat_options='';
gaussdb=# select r, r is null as isnull, r is not null as isnotnull from (values (1,row(1,2)), (1,row(null,null)), (1,null), (null,row(1,2)), (null,row(null,null)), (null,null) ) r(a,b);
      r      | isnull | isnotnull 
-------------+--------+-----------
 (1,"(1,2)") | f      | t
 (1,"(,)")   | f      | t
 (1,)        | f      | f
 (,"(1,2)")  | f      | f
 (,"(,)")    | f      | f
 (,)         | t      | f
(6 rows)

aformat_regexp_match

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

设置此项,且sql_compatibility参数的值为A或B或在M-Compatibility兼容数据库时,正则表达式的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

开启此参数后,针对pg_type表中tableof类型相关字段的重写会被禁用。即读取pg_type表时,会显示tableof类型实际存储的值。

disable_emptystr2null

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

compat_cursor

控制隐式游标状态兼容行为。设置此项,且兼容A,隐式游标状态(SQL%FOUND、SQL%NOTFOUND、SQL%ISOPNE、SQL%ROWCOUNT)由原先的仅在当前执行的函数有效,拓展到包括本函数调用的子函数有效。

allow_procedure_compile_check

控制存储过程中select语句和open cursor语句的编译检查。设置此项时,在存储过程中执行select语句、open cursor for语句、cursor%rowtype语句、for rec in语句时,若查询的表不存在,则无法创建存储过程,不支持trigger函数的编译检查,若查询的表存在,则成功创建存储过程。

注意:创建密态函数时,需要将allow_procedure_compile_check关闭。

skip_insert_gs_source

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

select_into_return_null

开启此参数后,存储过程语句SELECT select_expressions INTO [STRICT] target FROM ... 允许在不指定STRICT并且查询结果为空时给变量赋NULL值。

plsql_security_definer

开启此参数后,创建存储过程时默认为定义者权限。

proc_outparam_override

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

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

proc_implicit_for_loop_variable

控制存储过程中FOR_LOOP查询语句行为设置此项时,在FOR rec IN query LOOP语句中,若rec已经定义,不会复用已经定义的rec变量,而是重新建立一个新的变量。否则,会复用已经定义的rec变量,不会建立新的变量。

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;

varray_compat

开启此参数后:
  1. 数组类型元素赋值、元素读取行为会发生改变。
  2. 调用相关数组函数行为会发生改变。
  3. 开启此参数后会校验varray类型最大容量。

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

说明:
  • 不要在同session内切换并使用该参数。
  • 升级到新版本的数据库:
    • 对于已经在存储过程或PACKAGE内定义好的数组类型,开启varray_compat参数不会使上述功能生效。需要重新创建数组类型,即需要重新创建存储过程或PACKAGE,执行CREATE OR REPLACE或DROP + CREATE操作来重新创建存储过程或PACKAGE从而重新创建数组类型后该参数才能生效。
    • 当执行CREATE OR REPLACE PACKAGE/CREATE OR REPLACE PACKAGE BODY操作的内容与原PACKAGE/原PACKAGE BODY内容一致时,不会重新创建原数组类型,开启varray_compat参数不会使上述功能生效。

tableof_elem_constraints

开启此参数后:

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

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

说明:
  • 不要在同session内切换并使用该参数。
  • 对于升级新版本的数据库:
    • 对于已经在存储过程或PACKAGE内定义好的集合类型,开启tableof_elem_constraints参数不会使上述功能生效。需要重新创建集合类型,即需要重新创建存储过程或PACKAGE,执行CREATE OR REPLACE或DROP + CREATE操作来重新创建存储过程或PACKAGE从而重新创建集合类型后该参数才能生效。
    • 当执行CREATE OR REPLACE PACKAGE/CREATE OR REPLACE PACKAGE BODY操作的内容与原PACKAGE/原PACKAGE BODY内容一致时,不会重新创建原集合类型,开启tableof_elem_constraints参数不会使上述功能生效。
    • 通过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

默认场景下,对于A和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_backcompa

控制在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)
说明:
  • 该参数仅在数据库兼容性为A时有效。

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兼容性参数设置为A时生效。
  • 启用该参数,会影响BPCHAR类型之间进行LIKE或NOT LIKE模式匹配时的结果集与执行计划。

cursor_asensitive

用于游标数据敏感行为的前向兼容,集中式暂不支持该选项。

show_full_error_lineno

用于显示包含存储过程头部信息的行号,创建存储过程打印编译报错信息时,显示从CREATE语句开始的行号;调用有编译问题的语句时,对于非失效重编译场景,显示从CREATE语句开始的行号,失效重编译报错按照原有逻辑显示行号,调用编译显示报错信息需要开启gs_source且该表中存在存储过程的原始定义,否则按照原有逻辑显示报错行号;执行存储过程时报错,设置该参数后,显示从CREATE语句开始的行号。该参数仅在集中式下生效。

gaussdb=# set behavior_compat_options='show_full_error_lineno'; 
gaussdb=# set plsql_compile_check_options='plsql_expression_check';
gaussdb=# CREATE OR REPLACE function proclex1(type1 int) return int 
    is
      var1 int;
      var2 int;
    begin
      var3 := 30; --- var3未定义
    return type1;
    end;
    /
WARNING:  "var3" is not a known variable
DETAIL:  N/A
CONTEXT:  compilation of PL/pgSQL function "proclex1" near line 6
WARNING:  Function created with compilation errors.

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兼容性参数设置为A时生效。
  • 启用该参数,会影响涉及如下场景的操作符的执行计划:
    • (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

--创建SCHEMA sch1
gaussdb=# CREATE SCHEMA sch1;

--创建PACKAGE后报错
gaussdb=# CREATE PACKAGE pck1
          IS 
          PROCEDURE sch1.pck1();
          END pck1;
          /
ERROR:  not support procedure name use *.* format in package at or near ";"
CONTEXT:  compilation of PL/pgSQL package near line 1

--删除SCHEMA sch1
gaussdb=# DROP SCHEMA sch1;

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语法得到的日期时间跟A数据库保持一致。由于GaussDB只能显示session时区,A可以显示输入的时区,当时区不一致时显示的结果不同,将日期时间转换到相同时区后是同一时间点。

--打开参数前
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)
说明:

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

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

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

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中对应设置方法进行设置。

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

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

plsql_compile_check_options

参数说明:数据库兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表4,当设置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set plsql_compile_check_options='for_loop,outparam'。

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

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

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

表4 兼容性配置项

兼容性配置项

兼容性行为控制

for_loop

控制存储过程中FOR_LOOP查询语句行为。设置此项时,在FOR rec IN query LOOP语句中,若rec已经定义,不会复用已经定义的rec变量,而是重新建立一个新的变量。否则,会复用已经定义的rec变量,不会建立新的变量。(与proc_implicit_for_loop_variable相同,后续进行收编)

outparam

可能存在多个同名但输出参数列表不同的重载函数,若开启该选项,将对out出参进行检查,out出参为常量时报错。

plsql_expression_check

开启plsql_expression_check参数。

校验函数、存储过程和PACKAGE中的全量语句。当存在未定义的对象时(例如表不存在,变量不存在,函数不存在),会打印告警信息。

说明:
  • SQL语句提供校验功能,仅支持SELECT,INSERT,UPDATE,DELETE, MERGE。其余DDL,DML不支持。
  • 动态SQL不进行校验。
  • 存在误报情况,误报会导致函数、存储过程和PACKAGE新建出现告警,失效重编译出现告警、pg_object的valid字段为false。

    所以推荐测试环境使用,调试函数、存储过程和PACKAGE,修改函数、存储过程和PACKAGE定义,提高问题定位效率。生产中不推荐使用。

校验功能举例:
gaussdb=# CREATE OR REPLACE procedure proc1()
    AS
        var1 int;
    begin
        SELECT id into var1 from table1_not_exist limit 1;--表不存在,有告警信息
        SELECT id into var1 from view1_not_exist limit 1;--视图不存在,有告警信息
        var1 := func_input1(func1_not_exist());--函数不存在,有告警信息
        var1 := pkg.var1_not_exist;--package变量不存在,有告警信息
    end;
    /
执行结果如下:新建成功,打印告警信息
WARNING:  compile failed when parse the query: select id           from table1_not_exist limit 1, error info is relation "table1_not_exist" does not exist on datanode
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 3
WARNING:  compile failed when parse the query: select id           from view1_not_exist limit 1, error info is relation "view1_not_exist" does not exist on datanode
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 4
WARNING:  compile failed when parse the query: SELECT func_input1(func1_not_exist()), error info is function func1_not_exist() does not exist
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 5
WARNING:  compile failed when parse the query: SELECT pkg.var1_not_exist, error info is missing FROM-clause entry for table "pkg"
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 6
WARNING:  Procedure created with compilation errors.
CREATE PROCEDURE

存在误报情况:

示例1:

gaussdb=# CREATE TABLE emp(deptno smallint, ename char(100), salary int);
gaussdb=# CREATE TABLE emp_back(deptno smallint, ename char(100), salary int);
gaussdb=# CREATE OR REPLACE PROCEDURE proc_200()
    As
    BEGIN
        for data in delete from emp returning * loop
            INSERT INTO emp_back values(data.deptno,data.ename,data.salary);--此处误报
        END LOOP;
    END;
    /
WARNING:  compile failed when parse the query: INSERT INTO emp_back values(data.deptno,data.ename,data.salary), error info is record "data" is not assigned yet when get datum type info
DETAIL:  N/A
CONTEXT:  compilation of PL/pgSQL function "proc_200" near line 4
WARNING:  Procedure created with compilation errors.
CREATE PROCEDURE
示例2:
gaussdb=# CREATE OR REPLACE procedure proc1() is
    BEGIN
        DROP TABLE if exists table1;
        CREATE TABLE table1(id int);
        INSERT INTO table1 values(1);--此处会误判断错误,table1不存在。
    END;
    /
WARNING:  compile failed when parse the query: insert into table1 values(1), error info is relation "table1" does not exist on datanode
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 2
WARNING:  Procedure created with compilation errors.
CREATE PROCEDURE

--pg_object对应的状态为无效。
gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on  obj.object_oid = proc.oid and proc.proname = 'proc1';
object_type | valid
-------------+-------
P           | f
(1 row)
gaussdb=# ALTER procedure proc1 compile;
WARNING:  compile failed when parse the query: insert into table1 values(1), error info is relation "table1" does not exist on datanode
DETAIL:  N/A
CONTEXT:  compilation of PL/SQL function "proc1" near line 5
WARNING:  Procedure proc1 recompile with compilation errors.
ALTER PROCEDURE
gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on  obj.object_oid = proc.oid and proc.proname = 'proc1';
object_type | valid
-------------+-------
P           | f
(1 row)

gaussdb=# CALL proc1();
NOTICE:  table "table1" does not exist, skipping
CONTEXT:  SQL statement "drop table if exists table1"
PL/SQL function proc1() line 3 at SQL statement
proc1
-------

(1 row)

gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on  obj.object_oid = proc.oid and proc.proname = 'proc1';
object_type | valid
-------------+-------
P           | t
(1 row)

该参数在新建函数、存储过程、PACKAGE,以及重编译函数、存储过程、PACKAGE时,会执行校验的功能。误报会导致pg_object的valid字段变为false。

执行阶段,不进行校验。执行成功时,pg_object的valid字段变为true。

a_format_version

参数说明:数据库平台兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表5

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

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

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

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

表5 兼容性配置项

兼容性配置项

兼容性行为控制

10c

A平台兼容版本。

a_format_dev_version

参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表6

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

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

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

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

表6 兼容性配置项

兼容性配置项

兼容性行为控制

s1

  • A平台兼容迭代小版本,影响函数(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

  • A平台兼容迭代小版本,影响函数(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, rawtohex2, bit2coding, bit4coding)。
  • 兼容配置项为s1时的所有行为。

s3

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

s4

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

s5

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

s6

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

b_format_version

参数说明:数据库平台兼容性行为配置项,用于控制B兼容模式下的前向兼容性。该参数可在PDB级别设置。

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

参数类型:字符串

参数单位:

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

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

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

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

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

b_format_dev_version

参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。

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

参数类型:字符串

参数单位:

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

表7 兼容性配置项

兼容性配置项

兼容性行为控制

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. 此选项打开时,auto_increment_cache参数功能才会生效。
    2. 此选项打开时,multi_insert_min_rows参数功能对自动增长列生效。
    3. 此选项打开时,standard_conforming_strings、escape_string_warning参数被置为off。
    4. 此选项打开时,collation_connection、character_set_connection参数功能才会生效。
  2. 影响如下功能:
    1. AUTO_INCREMENT自动增长列在导入数据或者进行BATCH INSERT执行计划的插入操作时,对于混合0、NULL和确定值的场景,确定值插入时会立即更新自增计数,后续的0/NULL将在确定值的基础上自增。
    2. like操作符对于匹配串末尾是转义符的场景不再报错。
    3. 字符集、字符序的排序规则优先级将发生变更,详见《开发指南》中“SQL参考 > 字符集与字符序 > 字符集和字符序合并规则”章节。
    4. 打开参数后,不支持外键字符序和列上字符序不一致。
  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. 支持set names指定collate子句。
    5. 涉及ALTER TABLE,RENAME TABLE等更改表名的语法,影响场景如下:

      新表名对应字符串开头为“#MySQL50#",且其后有其他字符,“#MySQL50#"将被忽略。

      如果新旧表名一致,不会报错。

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

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

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

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

m_format_dev_version

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

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

参数类型:字符串

参数单位:

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

表8 兼容性配置项

兼容性配置项

兼容性行为控制

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作为列约束时,语法语义改变,改为忽略该外键定义。

s2

影响如下操作符:

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

影响如下视图:

  1. information_schema.statistics视图内INDEX_NAME字段在主键场景由显示primary改为显示PRIMARY;COLUMN_NAME和SUB_PART字段补充了前缀索引场景的支持;临时表索引由显示改为不显示;系统列的索引由部分场景可能会显示改为不显示。
  2. information_schema.global_variables视图内数据由显示pg_settings表里面所有数据缩小为pg_settings表里context字段是“internal”、“postmaster”、“backend”、“sighup”数据。
  3. information_schema.columns视图内COLUMN_KEY字段补充了前缀索引场景的支持。
  4. information_schema.table_constraints视图内CONSTRAINT_NAME字段在主键约束场景由显示约束名改为显示PRIMARY。
  5. information_schema.character_sets视图可以查询所有可用字符集信息。
  6. information_schema.collations视图可以查询所有可用字符排序规则信息。
  7. information_schema.collation_character_set_applicability视图可以查询所有可用排序规则和字符集的对应关系。
  8. information_schema.character_sets、information_schema.collations、information_schema.collation_character_set_applicability视图中的CHARACTER_SET_NAME改成小写,查询显示根据字符序细分utf8mb4和utf8。

影响如下语法:

  1. 以下事务语法语义改变,改为设置下一个事务特性:
    1. set @@transaction_isolation = value
    2. set @@transaction_read_only = value
    3. set transaction isolation level
    4. set transaction {read write | read only}
  2. set transaction 语法语义改变,改为设置会话级事务特性:
    1. set [local|session|@@session.] transaction_isolation = value
    2. set [local|session|@@session.] transaction_read_only = value
  3. show transaction_isolation显示为带中划线的隔离级别。
  4. 创建生成列不指定STORED和VIRTUAL关键字,默认创建虚拟生成列。
  5. SHOW CREATE TABLE语法返回结果集变更,包括:
    1. 列/表注释位置变更,从以COMMENT ON语句形式返回改为在CREATE TABLE语句以COMMENT子句形式中返回;
    2. 主键与唯一约束位置变更,从以ALTER TABLE ADD CONSTRAINT语句形式返回改为在CREATE TABLE语句以CONSTRAINT子句形式作为表约束中返回;
    3. 主键与唯一约束中的USING INDEX TABLESPACE选项不再显示,该选项在设置兼容版本控制开关为s1后被禁用;
    4. 索引注释位置变更,从以COMMENT ON语句形式返回改为在CREATE INDEX语句以COMMENT子句形式返回;
    5. 全局临时表ON COMMIT选项位置变更,从以CREATE TABLE语句WITH子句中on_commit_delete_rows参数形式返回改为在CREATE TABLE语句以ON COMMIT子句形式返回。
  6. SHOW CHARACTER SET语法查询使用视图information_schema.character_sets,查询结果随该视图内容的变化而变化。
  7. SHOW COLLATION语法查询使用视图information_schema.collations,查询结果随该视图内容的变化而变化。

影响以下GUC参数:

  1. 增加transaction_isolation的参数范围。

影响如下功能:

  1. 删除生成列的基列需要先删除对应的生成列。
  2. 存储生成列的基列不支持指定SET NULL、SET DEFAULT、CASCADE关键字关联 ON UPDATED和ON DELETE动作。
  3. ALTER TABLE修改表涉及存储生成列时,生成列的CHECK约束检查生效。

默认值:""

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

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

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

sql_mode

参数说明:B兼容模式下和M-Compatibility模式下SQL行为控制配置项。该参数可在PDB级别设置。

  • sql_compatibility兼容性参数设置为B、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的顺序,大写显示,不因设置时的顺序与大小写而改变。

参数类型:字符串

参数单位:

取值范围:

  • B模式:空字符串""或"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模式:除支持B模式参数外,还新增了no_unsigned_subtraction、ansi_quotes、allow_invalid_dates、real_as_float、strict_all_tables、traditional。

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

表9 兼容性配置项

兼容性配置项

兼容性行为控制

B模式参数配置说明

M-Compatibility模式参数配置说明

strict_trans_tables

设置时,对输入的参数格式和范围做严格校验。无效值输入或者超过范围时,解析报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效果一致。

可独立设置和取消。

说明:

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

可独立设置和取消。

默认值:"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"。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

foreign_key_checks

参数说明:控制是否开启外键约束的完整性检查。多租场景下,该参数可在PDB级别设置。

该参数仅在M-Compatibility兼容模式下生效。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示启用外键约束的完整性检查。
  • off:表示关闭外键约束的完整性检查。

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

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

设置建议:建议仅在数据导入时,且保证原有数据满足外键约束完整性的场景下,将该参数设置为off,提升导入效率。

设置不当的风险与影响:将该参数设置为off时,对参考表、被参考表的DML操作不会触发外键的完整性检查。DML操作后,表中可能存在与外键完整性冲突的数据,且重新启用该参数时,不会对已有数据是否符合外键约束完整性进行校验。

该参数影响以下行为:
  • DDL操作:
    • 在创建表时,无论foreign_key_checks是否启用,都会校验表名是否与已有的外键(被参考表不存在)相匹配,如果匹配,则校验外键定义是否正确,并将被参考表不存在的外键转换为被参考表存在的外键。
    • 在添加外键时,如果外键引用的被参考表不存在,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时会创建被参考表不存在的外键。
    • 在删除被参考表时,如果指定了CASCADE选项,则无论foreign_key_checks是否启用,都会级联删除参考表上的外键;如果未指定CASCADE选项,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时会将外键转换为参考表不存在的外键。
    • 在TRUNCATE被参考表时,如果指定了CASCADE选项,则无论foreign_key_checks是否开启,都会级联删除参考表中的数据;如果未指定CASCADE选项,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时不提示报错信息,也不会级联清除参考表中的数据。
  • DML操作:具体行为如表10所示。
表10 foreign_key_checks对DML操作的影响

操作

foreign_key_checks

被参考表

参考表(被参考表存在)

参考表(被参考表不存在)

INSERT

on

无需检查,插入成功。

检查完整性,与完整性冲突时,则插入失败。

外键字段无法插入非空值。

off

无需检查,插入成功。

跳过检查,插入成功。

跳过检查,插入成功。

DELETE

on

检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。

无需检查,删除成功。

无需检查,删除成功。

off

跳过检查,删除成功。

无需检查,删除成功。

无需检查,删除成功。

UPDATE

on

检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。

检查完整性,与完整性冲突时,则更新失败。

外键字段无法更新为非空值。

off

跳过检查,更新成功。

跳过检查,更新成功。

跳过检查,更新成功。

REPLACE INTO

on

检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。

检查完整性,与完整性冲突时,则操作失败。

外键字段无法新增或被更新为非空值。

off

跳过检查,操作成功。

跳过检查,操作成功。

跳过检查,操作成功。

auto_increment_increment

参数说明:AUTO_INCREMENT自动增长列的自增步长,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:1 ~ 65535

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

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

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

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

auto_increment_offset

参数说明:AUTO_INCREMENT自动增长列的起始值,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。多租场景下,该参数可在PDB级别设置。

参数类型:整型

参数单位:

取值范围:1 ~ 65535

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

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

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

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

auto_increment_cache

参数说明:对自动增长列批量插入或导入触发自增时,预留自增缓存值的个数。预留自增值时,刷新自增计数器为自增缓存值的最大值,缓存值使用完毕之前,自增计数器值不变,触发自增使用缓存的值。多租场景下,该参数可在PDB级别设置。

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

参数类型:整型

参数单位:

取值范围: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。在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

disable_keyword_options

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

参数类型:字符串

参数单位:

取值范围:

  • 非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、extend、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模式数据库下:""。
  • 在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

B兼容模式下,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

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

参数类型:字符串

参数单位:

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

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

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

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

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

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

plpgsql.variable_conflict

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

参数类型:字符串

参数单位:

取值范围

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

默认值error

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

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

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

td_compatible_truncation

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

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

参数类型:布尔型

参数单位:

取值范围:

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

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

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

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

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

uppercase_attribute_name

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

参数类型:布尔型

参数单位:

取值范围:

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

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

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

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

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

enable_copy_error_log

参数说明:控制gs_loader使用错误表pgxc_copy_error_log的开启和关闭。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启错误表。
  • off:表示关闭错误表。

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

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

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

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

loader_support_nul_character

参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:""、"s1"、"s2",具体含义见表11

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

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

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

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

  • 使用gs_loader导入工具开启nul字符(0x00)容错特性时,涉及到此GUC参数的设置。
  • 具体参见《工具参考》的“客户端工具 > gs_loader”章节。
表11 兼容性配置项

兼容性配置项

兼容性行为控制

s1

设置gs_loader在导入过程中数据文件存在nul字符处理方式。当数据文件中存在nul字符时,会根据nul字符的位置对数据进行截断,nul字符前的数据会被导入到表中,nul字符后的数据会被截断丢弃,用作功能的前向兼容。

s2

设置gs_loader在导入过程中数据文件存在nul字符处理方式。当数据文件中存在nul字符时,会先将nul字符转换成为空格字符" "(0x20),再进行加工,判断和导入。

空值

参数默认配置,不影响任何功能使用。

a_format_copy_version

参数说明:数据库平台迭代小版本兼容性行为配置项,该参数的值为字符串枚举值。使用gs_loader导入工具新特性时,需要设置对应的值。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表12

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

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

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

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

兼容性配置项时设置字符串,具体参见《工具参考》的“客户端工具 > gs_loader”章节,使用方式为通过guc_param设置a_format_copy_version参数。

表12 兼容性配置项

兼容性配置项

兼容性行为控制

s1

  • 支持gs_loader指定数据类型(CHAR[(length)]/INTEGER external[(length)]/FLOAT external[(length)]/DECIMAL external[(length)]/TIMESTAMP/DATE/DATE EXTERNAL/INTEGER/SMALLINT/RAW[(length)])导入数据。
  • 支持gs_loader列表达式使用场景扩展。
  • gs_loader导入数据的CSV模式下,会跳过字段开头空格。并且当某个字段第一个非空格字符不是enclosed字符时,忽略enclosed设置。当未匹配到关闭enclosed字符,先匹配到行末时,会进行报错。

enable_volatile_match_index

参数说明:控制volatile类型函数是否可以匹配索引,仅在DBCOMPATIBILITY为A的数据库中生效。volatile函数匹配索引存在语义风险,stable、immutable函数默认可以匹配索引,且符合语义。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启。
  • off:表示关闭。

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

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

设置建议:根据函数实际易变性进行设置。

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

enable_union_all_order

参数说明:控制UNION ALL在主查询未排序的的情况下,是否支持子查询保序。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启。
  • off:表示关闭。

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

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

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

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

enable_immutable_optimization

参数说明:控制immutable类型函数是否可以被优化执行,仅在DBCOMPATIBILITY为A的数据库中生效。如果带有immutable定义的函数违反immutable语义,则其调用结果、其值以及对其调用者的影响均未定义。该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启。
  • off:表示关闭。

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

设置方式:该参数属于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值用逗号隔开组成。设置该参数的系统函数将不能被调用。当某一系统函数不能满足用户需求并且需要使用相同函数名的自定义函数时,可使用该功能。该参数可在PDB级别设置。

参数类型:字符串

参数单位:

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

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

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

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

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

enable_convert_illegal_char

参数说明对输出结果中的非法编码是否不进行校验并以占位符替换显示。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,特殊字符在查询时将替换为convert_illegal_char_mode参数指定符号的编码。
  • off:表示关闭,查询结果中包含的超出当前字符集编码规则外的编码时会在校验后报错。

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

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

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

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

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

序号

函数名/高级包函数名

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

参数说明:是否优化函数匹配策略。多租场景下,该参数可在PDB级别设置。

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

参数类型:字符串

参数单位:

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

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

默认值:

  • "catlist":新安装的数据库的默认值。
  • "":505.1.0版本之前的数据库升级后的默认值。
  • 在PDB场景内,若未设置该参数,则继承来自全局的设置。

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

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

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

enable_force_create_obj

参数说明:用于控制一次性入库功能的开启与关闭。开启该参数后,若创建或重建函数、包时存在未定义的对象,会创建一个虚拟的对象用于编译,并在函数体编译的过程中通过try catch捕获异常,使创建或重建过程能够运行成功。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

  • on:打开一次性入库功能。
  • off:关闭一次性入库功能。

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

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

设置建议:根据需求场景进行配置。若无特殊情况,建议开启对应功能。

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

ddl_invalid_mode

参数说明:用于控制在对函数或包做DROP操作时,对依赖其的对象(函数或包)进行的行为。多租场景下,该参数可在PDB级别设置。

级联失效依赖对象的过程中,当出现了已失效的对象时,中断级联失效操作。

参数类型:枚举类型

参数单位:

取值范围:

  • delete:对函数或包做DROP操作时,级联删除依赖其的对象(函数或包)。
  • invalid:对函数或包做DROP操作时,级联失效依赖其的对象(函数或包)。

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

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

设置建议:根据需求场景进行配置。

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

max_allowed_packet

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

参数类型:整型

参数单位:字节

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

默认值:4194304

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

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

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

div_precision_increment

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

参数类型:整型

参数单位:

取值范围:0 ~ 30

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

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

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

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

enable_m_format_hook

参数说明:M-Compatibility模式数据库行为配置项。该参数控制M-Compatibility模式hook是否生效。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围:

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

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

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

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

设置不当的风险与影响:

net_write_timeout

参数说明:M-Compatibility模式数据库行为配置项。该参数用于设置在中止写入之前等待块写入连接的秒数。多租场景下,该参数可在PDB级别设置。

参数类型整型

参数单位:

取值范围:1 ~ 31536000

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

设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。取值不能带单位。

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

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

该参数仅用于适配MySQL JDBC驱动,功能暂不生效。

init_connect

参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端为每个连接的客户端执行的字符串。

参数类型字符串

参数单位:

取值范围:

默认值:""

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@init_connect”查询,并需要将m_format_dev_version设置为's2'。

interactive_timeout

参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端在关闭交互式连接之前等待其活动的秒数。返回值与session_timeout一致。

参数类型整型

参数单位:

取值范围:0 ~ 86400

默认值:600

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@interactive_timeout”查询。

wait_timeout

参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端在关闭非交互式连接之前等待活动的秒数。返回值与session_timeout一致。

参数类型整型

参数单位:

取值范围:0 ~ 86400

默认值:600

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@wait_timeout”查询。

license

参数说明:M-Compatibility模式数据库行为配置项。该参数表示许可证类型。

参数类型字符串

参数单位:

取值范围:

默认值:""

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@license”查询。

lower_case_table_names

参数说明:M-Compatibility模式数据库行为配置项。该参数表示表名是否对大小写敏感。

参数类型整型

参数单位:

取值范围:

  • 0:表示表名将按照指定的大小写形式进行存储,并以区分大小写形式进行比较。
  • 1:表示表名将按照小写形式进行存储,并以不区分大小写形式进行比较。

默认值:0

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@lower_case_table_names”查询。

net_buffer_length

参数说明:M-Compatibility模式数据库行为配置项。该参数用于控制客户端线程关联的连接缓冲区和结果集缓冲区的初始大小。

参数类型整型

参数单位:Byte

取值范围:1024 ~ 1048576

默认值:8192

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@net_buffer_length”查询。

performance_schema

参数说明:M-Compatibility模式数据库行为配置项。该参数表示是否支持performance信息的查询。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示支持performance信息的查询。
  • off:表示不支持performance信息的查询。

默认值off

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@performance_schema”查询。

query_cache_type

参数说明:M-Compatibility模式数据库行为配置项。该参数表示查询缓存类型。

参数类型:字符串

参数单位:

取值范围:

  • on:表示支持查询缓存。
  • off:表示不支持查询缓存。

默认值off

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@query_cache_type”查询。

query_cache_size

参数说明:M-Compatibility模式数据库行为配置项。该参数表示为缓存查询结果分配的内存量。

参数类型整型

参数单位:Byte

取值范围:0 ~ 18446744073709551615

默认值0

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@query_cache_size”查询。

system_time_zone

参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端系统时区。同log_timezone

参数类型字符串

参数单位:

取值范围:log_timezone一致。

默认值根据OS时区设置。

设置方式:该参数暂不支持设置,只能查看。

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

设置不当的风险与影响:

该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@system_time_zone”查询。

time_zone

参数说明:M-Compatibility模式数据库行为配置项。该参数表示当前会话时区。同TimeZone

参数类型字符串

参数单位:

取值范围:支持'+08:00'的HH:MM时间格式和'Asia/Shanghai'的地域形式取值。

时间格式为:[+][H]H[:MM]、-[H]H[:MM],以'+'或'-'开头,'+'可省略。取值范围为:'-12:59' ~ '+13:00'。

默认值"PRC"

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

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

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

该参数仅用于适配MySQL JDBC驱动,可通过“SELECT @@time_zone”查询。将m_format_dev_version设置为's2'后,才可支持设置time_zone参数。

gs_format_behavior_compat_options

参数说明:gs_format_behavior_compat_options用于选择GaussDB内部系统函数配置项。多租场景下,该参数可在PDB级别设置。

参数类型:字符串

参数单位:

取值范围:当前只支持表14中的兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。在PDB场景内,若未设置该参数,则承接来自全局的设置。

默认值:"karatsuba"

表14 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. 该参数仅在数据库兼容性为A兼容模式且所有节点都设置为support_zero_character=on时生效。
  2. 当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字符处发生报错。
  3. 数据库仅支持以下写入0字符的方式:
    • 通过JDBC连接数据库时,0字符可以通过文本方式写入数据库。
    • 通过dbe_raw.cast_to_varchar2函数直接将0字符编码写入数据库。
    • 通过copy/gs_loader工具将0字符编码写入数据库。
  4. 在开启GUC参数时,不同字符集之间进行转换时,0字符会直接返回,不再发生报错。
  5. gsql客户端版本应与数据库版本匹配,在开启GUC参数时,若gsql端接收到的数据中包含0字符,gsql工具会将0字符转换为空格后进行打印输出。若使用旧版本gsql连接数据库,包含0字符的数据仍存在显示被截断的情况。
  6. 当开启GUC参数时,0字符在表15所列的函数、高级包函数中的表现为:函数能够正常处理0字符,不会发生在0字符处截断的情况。
  7. 部分高级包接口入参为Schema名或object名,理论上不能含有0字符,因此对表16中的函数添加0字符校验,当入参包含0字符时进行报错处理(原表现为0字符后数据被截断)。
  8. 当support_zero_character=on时,若处理的数据中不包含0字符,函数性能无明显劣化;若处理的数据中包含0字符,对比相同数量的有效字符时,initcap、upper、lower、nls_upper、nls_lower函数性能劣化程度与数据中0字符个数紧密相关,即0字符个数越多,性能劣化越严重。
  9. 当support_zero_character=on时,若逻辑解码工具读取到数据中包含的0字符,则会将0字符转换为空格后进行打印输出(原表现为0字符后数据被截断)。
表15 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

表16 入参包含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,该参数仅在A兼容模式下生效。

参数类型:布尔型

参数单位:

取值范围

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

默认值off

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

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

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

enable_ecpg_cursor_duplicate_operation

参数说明ECPG控制在A兼容下是否支持重复打开/关闭游标,仅在ECPG连接A兼容数据库时生效。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

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

设置方式:该参数属于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所指的天数不同时)返回一个格式正确的时间不会报错,具体冲突行为如表17所示。多租场景下,该参数可在PDB级别设置。

参数类型:布尔型

参数单位:

取值范围

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

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

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

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

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

表17 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。

相关文档