更新时间:2024-11-05 GMT+08:00

其它选项

enable_cluster_resize

参数说明:标识当前会话是否为扩容重分布会话。该参数应仅限用于扩容重分布会话,其他业务会话不要设置该参数。

参数类型:SUSET

取值范围:布尔型

  • on表示标识当前会话为扩容重分布会话,可以执行重分布专有SQL语句。
  • off表示标识当前会话为非扩容重分布会话,不能执行重分布专有SQL语句。

默认值:off

此参数用于内部运维场景,请勿随意开启。

dfs_partition_directory_length

参数说明:在HDFS文件系统上,构造HDFS VALUE分区表的分区目录时,目录名长度的上限值。

参数类型:USERSET

取值范围:92~7999

默认值:512

enable_hadoop_env

参数说明:设置使用Hadoop特性时,是否允许在数据库中创建本地行存表和列存表。GaussDB(DWS)集群中,集群安装好后,该参数默认设为off。以支持本地行列存储和跨集群访问Hadoop特性。不推荐用户调整enable_hadoop_env的值。

参数类型:USERSET

取值范围: 布尔型

  • on/true,表示使用Hadoop特性时,不允许在数据库中创建本地行存表和列存表。
  • off/false,表示使用Hadoop特性时,可以在数据库中创建本地行存表和列存表。

默认值:off

enable_upgrade_merge_lock_mode

参数说明:当该参数设置为on时,通过提升deltamerge内部实现的锁级别,避免和update/delete并发操作时的报错。

参数类型:USERSET

取值范围: 布尔型

  • on,提升deltamerge内部实现的锁级别,并发执行deltamerge和update/delete操作时,一个操作先执行,另一个操作被阻塞,在前一个操作完成后,后一个操作再执行。
  • off,在对HDFS表的delta table的同一行并发执行deltamerge和update/delete操作时,后一个对同一行数据更新的操作会报错退出。

默认值:off

job_queue_processes

参数说明:表示系统可以并发执行的job数目。

参数类型:POSTMASTER

取值范围:0~1000

功能:

  • 当job_queue_processes设置为0值,表示不启用定时任务功能,任何job都不会被执行(因为开启定时任务的功能会对系统的性能有影响,有些局点可能不需要定时任务的功能,可以通过设置为0不启用定时任务功能)。
  • 当job_queue_processes为大于0时,表示启用定时任务功能且系统能够并发处理的最大任务数。

启用定时任务功能后,job_scheduler线程会在定时时间间隔轮询pg_jobs系统表,系统设置定时任务检查周期默认为1s。

由于并行运行的任务数太多会消耗更多的系统资源,因此需要设置系统并发处理的任务数,当前并发的任务数达到job_queue_processes时,且此时又有任务到期,那么这些任务本次得不到执行而延期到下一轮询周期。因此,建议用户需要根据每个任务的执行时长合理的设置任务的时间间隔(即submit接口中的interval参数),来避免由于任务执行时间太长而导致下个轮询周期无法正常执行。

注:如果同一时间内并行的job数很多,过小的参数值会导致job等待。而过大的参数值则消耗更多的系统资源,建议设置此参数为100,用户可以根据系统资源情况合理调整。

默认值:10

ngram_gram_size

参数说明:ngram解析器分词的长度。

参数类型:USERSET

取值范围:整型 ,1~4

默认值:2

ngram_grapsymbol_ignore

参数说明:ngram解析器是否忽略图形化字符。

参数类型:USERSET

取值范围:布尔型

  • on表示忽略图形化字符。
  • off表示不忽略图形化字符。

默认值:off

ngram_punctuation_ignore

参数说明:ngram解析器是否忽略标点符号。

参数类型:USERSET

取值范围:布尔型

  • on表示忽略标点符号。
  • off表示不忽略标点符号。

默认值:on

zhparser_dict_in_memory

参数说明:Zhparser解析器是否将字典加载到内存中。

参数类型:POSTMASTER

取值范围:布尔型

  • on表示将字典加载到内存中
  • off表示不将字典加载到内存中

默认值:on

zhparser_multi_duality

参数说明:Zhparser解析器设定是否将长词内的文字自动以二字分词法聚合。

参数类型:USERSET

取值范围:布尔型

  • on表示将长词内的文字自动以二字分词法聚合。
  • off表示不将长词内的文字自动以二字分词法聚合。

默认值:off

zhparser_multi_short

参数说明:Zhparser解析器分词执行时是否执行针对长词复合切分。

参数类型:USERSET

取值范围:布尔型

  • on表示执行针对长词复合切分。
  • off表示不执行针对长词复合切分。

默认值:on

zhparser_multi_zall

参数说明:Zhparser解析器是否将全部单字单独显示。

参数类型:USERSET

取值范围:布尔型

  • on表示将全部单字单独显示。
  • off表示不将全部单字单独显示。

默认值:off

zhparser_multi_zmain

参数说明:Zhparser解析器是否将重要单字单独显示。

参数类型:USERSET

取值范围:布尔型

  • on表示将重要单字单独显示。
  • off表示不将重要单字单独显示。

默认值:off

zhparser_punctuation_ignore

参数说明:Zhparser解析器分词结果是否忽略所有的标点等特殊符号(不会忽略\r和\n)。

参数类型:USERSET

取值范围:布尔型

  • on:忽略所有的标点等特殊符号。
  • off:不忽略所有的标点等特殊符号。

默认值:on

zhparser_seg_with_duality

参数说明:Zhparser解析器是否将闲散文字自动以二字分词法聚合。

参数类型:USERSET

取值范围:布尔型

  • on表示将闲散文字自动以二字分词法聚合。
  • off表示不将闲散文字自动以二字分词法聚合。

默认值:off

acceleration_with_compute_pool

参数说明:在查询包含OBS时,通过该参数决定查询是否通过计算资源池进行加速。

参数类型:USERSET

取值范围:布尔型

  • on表示包含有OBS的查询在计算资源池可用时,会根据代价评估决定是否通过计算资源池对查询加速。
  • off表示任何查询都不会通过计算资源池进行加速。

默认值:off

behavior_compat_options

参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。

参数类型:USERSET

取值范围:字符串

默认值:升级场景下保持前向兼容,即与升级前的集群中该参数的默认值保持一致。新安装集群场景下,该参数默认值为check_function_conflicts,以防止用户定义错误的函数属性导致严重的问题。

  • 当前只支持表1
  • 配置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set behavior_compat_options='end_month_calculate,display_leading_zero';
  • 此参数选项中strict_concat_functions和strict_text_concat_td不能同时设置。
表1 兼容性配置项

兼容性配置项

兼容性行为控制

适用兼容模式

display_leading_zero

浮点数显示配置项。

  • 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如,0.25显示为.25
  • 设置此配置项时,对于-1~0和0~1之间的小数,显示小数点前的0。比如,0.25显示为0.25

例如,某数据迁移场景中,在导入时若未设置该参数,浮点数显示或者转为字符串的时候,缺少前面的0,导致出现类似如下报错。

1
2
ERROR: xxx invalid input syntax for type xxx
DETAIL: Token "." is invalid

ORA

TD

end_month_calculate

add_months函数计算逻辑配置项。

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

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

ORA

TD

compat_analyze_sample

analyze采样行为配置项。

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

ORA

TD

MySQL

bind_schema_tablespace

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

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

ORA

TD

MySQL

bind_procedure_searchpath

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

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

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

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

ORA

TD

MySQL

correct_to_number

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

若设置此配置项,则to_number()函数结果与PG11保持一致,否则默认与Oracle保持一致。

ORA

unbind_divide_bound

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

  • 不设置此配置项时,将对除法结果进行校验,超出范围则报错。例如,示例中INT_MIN/(-1)会因为超过结果大于INT_MAX而报越界错误:
SELECT (-2147483648)::int / (-1)::int;
ERROR:  integer out of range
  • 若设置此配置项,则不需要对除法结果进行范围校验。例如,示例中INT_MIN/(-1)可以得到输出结果INT_MAX+1:
SELECT (-2147483648)::int / (-1)::int;
  ?column?
------------
 2147483648
(1 row)

ORA

TD

merge_update_multi

控制merge into匹配多行时是否进行update操作。

若设置此配置项,匹配多行时update不报错,否则默认与Oracle保持一致,报错。

ORA

TD

disable_row_update_multi

控制行存表update匹配多行时是否进行update操作。

若设置此配置项,匹配多行时update报错,否则默认可以进行多行匹配更新。

ORA

TD

return_null_string

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

  • 不设置此配置项时,空字符串显示为NULL。
1
2
3
4
5
SELECT length(lpad('123',0,'*')) FROM dual;
length
--------

(1 row)
  • 设置此配置项时,空字符串显示为''。
1
2
3
4
5
SELECT length(lpad('123',0,'*')) FROM dual;
length
--------
0
(1 row)

ORA

compat_concat_variadic

控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。

若设置此配置项,当concat函数参数为variadic类型时,保留Oracle和Teradata兼容模式下不同的结果形式;否则默认Oracle和Teradata兼容模式下结果相同,且与Oracle保持一致。

ORA

TD

convert_string_digit_to_numeric

控制CHAR类型和INT类型进行二元BOOL运算时类型转换优先级的配置项。

  • 不设置此配置项时,类型转换优先级与PG9.6一致。
  • 设置此配置项时,所有CHAR类型和INT类型的二元BOOL运算均强制转换为NUMERIC类型进行计算。

    设置此配置项后会被影响的CHAR类型包括BPCHAR、VARCHAR、NVARCHAR2、TEXT四种类型,会被影响的INT类型包括INT1、INT2、INT4、INT8四种类型。

注意:

此配置项只对二元BOOL运算生效,例如,INT2>TEXT、INT4=BPCHAR,非BOOL运算不会受到影响,该配置项暂不支持INT>'1.1'这类UNKNOWN类型运算的转换。由于该配置项开启后,CHAR类型与INT类型的BOOL运算会优先转换为NUMERIC类型进行计算,因此会影响数据库计算性能,当JOIN列为受影响的类型组合时,还会影响执行计划。

ORA

TD

MySQL

check_function_conflicts

控制是否检查自定义plpgsql/SQL函数的属性。

  • 不设置此配置项时,不检查自定义函数的IMMUTABLE/STABLE/VOLATILE属性。
  • 设置此配置项时,会检查自定义函数的IMMUTABLE属性,如果函数中含有表,或者是有STABLE/VOLATILE函数时,在执行时会报错。因为函数中如果有表或者STABLE/VOLATILE函数时,与函数定义中的IMMUTABLE属性冲突,即这种场景下,函数的行为非IMMUTABLE。

例如:设置此参数时,以下场景下会执行报错:

CREATE OR replace FUNCTION sql_immutable (INTEGER)
RETURNS INTEGER AS 'SELECT a+$1 FROM shipping_schema.t4 WHERE a=1;'
LANGUAGE SQL IMMUTABLE
RETURNS NULL
ON NULL INPUT;
select sql_immutable(1);
ERROR:  IMMUTABLE function cannot contain SQL statements with relation or Non-IMMUTABLE function.
CONTEXT:  SQL function "sql_immutable" during startup
referenced column: sql_immutable

ORA

TD

MySQL

varray_verification

控制是否校验数组长度以及数组类型长度。用于兼容GaussDB(DWS) 8.1.0之前的版本。

若设置此配置项,不会校验数组长度以及数组类型长度。

-- 场景1
CREATE OR REPLACE PROCEDURE varray_verification 
AS 
    TYPE org_varray_type IS varray(5) OF VARCHAR2(2); 
    v_org_varray org_varray_type; 
BEGIN 
    v_org_varray(1) := '111'; --例如赋值已经超过了VARCHAR2(2)的限制,配置该选项后将和历史版本保持一致不进行校验
END; 
/ 
--场景2
CREATE OR REPLACE PROCEDURE varray_verification_i3_1 
AS 
    TYPE org_varray_type IS varray(2) OF NUMBER(2); 
    v_org_varray org_varray_type; 
BEGIN 
    v_org_varray(3) := 1; --例如赋值已经超过了varray(2)的数组长度限制,配置该选项后将和历史版本保持一致不进行校验
END; 
/ 

ORA

TD

strict_concat_functions

控制函数textanycat()和anytextcat()在参数存在空值时,对返回值兼容性的配置项。此参数不能和strict_text_concat_td同时设置。

MySQL兼容模式下,此参数无影响。

  • 不设置此配置项时,函数textanycat()和anytextcat()的返回值默认与Oracle保持一致。
  • 设置此配置项时,若函数textanycat()和anytextcat()的参数存在空值,则返回值也为空值,保留与Oracle和Teradata兼容模式下不同的结果。

例如,不设置此配置项时,函数textanycat()和anytextcat()的返回值与Oracle保持一致:

SELECT textanycat('gauss', cast(NULL as BOOLEAN));
 textanycat
------------
 gauss
(1 row)

SELECT 'gauss' || cast(NULL as BOOLEAN); --这种情况下,||运算符会被转换为函数textanycat
 ?column?
----------
 gauss
(1 row)

设置此配置项时,保留与Oracle和Teradata兼容模式下不同的结果:

SELECT textanycat('gauss', cast(NULL as BOOLEAN));
 textanycat
------------

(1 row)

SELECT 'gauss' || cast(NULL as BOOLEAN); --这种情况下,||运算符会被转换为函数textanycat
 ?column?
----------

(1 row)

ORA

TD

strict_text_concat_td

Teradata兼容模式下,控制函数textcat()、textanycat()和anytextcat()在参数存在空值时,对返回值兼容性的配置项。此参数不能和strict_concat_functions同时设置。

  • 不设置此配置项时,Teradata兼容模式下函数textcat()、textanycat()和anytextcat()的返回值与GaussDB(DWS)一致。
  • 设置此配置项时,若Teradata兼容模式下函数textcat()、textanycat()和anytextcat()的参数存在空值,则返回值为空值。

例如,不设置此配置项时,函数textcat()、textanycat()和anytextcat()的返回值与GaussDB(DWS)保持一致:

td_compatibility_db=# SELECT textcat('abc', NULL);
textcat
---------
abc
(1 row)
td_compatibility_db=# SELECT 'abc' || NULL; --这种情况下,||运算符会被转换为函数textcat()
?column?
----------
abc
(1 row)

设置此配置项时,若函数textcat()、textanycat()和anytextcat()的返回值有空值,则返回NULL:

td_compatibility_db=# SELECT textcat('abc', NULL);
textcat
---------

(1 row)
td_compatibility_db=# SELECT 'abc' || NULL;
?column?
----------

(1 row)

TD

compat_display_ref_table

设置视图中列的显示格式。

  • 不设置该选项时默认带前缀,即tab.col的格式。
  • 设置该选项时与原始定义一致,原始定义带前缀则显示,否则不显示。
SET behavior_compat_options='compat_display_ref_table';
CREATE OR REPLACE VIEW viewtest2 AS SELECT a.c1, c2, a.c3, 0 AS c4 FROM viewtest_tbl a;
SELECT pg_get_viewdef('viewtest2');
pg_get_viewdef
-----------------------------------------------------
SELECT a.c1, c2, a.c3, 0 AS c4 FROM viewtest_tbl a;
(1 row)

ORA

TD

para_support_set_func

列存表中控制函数COALESCE()、NVL()、GREATEST()、LEAST()入参是否支持多结果集表达式。

  • 不设置此配置项时,函数入参包含多结果集表达式时,直接报错不支持。
1
2
SELECT COALESCE(regexp_split_to_table(c3,'#'), regexp_split_to_table(c3,'#')) FROM regexp_ext2_tb1 ORDER BY 1 LIMIT 5;
ERROR:  set-valued function called in context that cannot accept a set
  • 设置此配置项时,支持函数入参包含多结果集表达式。
1
2
3
4
5
6
7
8
9
SELECT COALESCE(regexp_split_to_table(c3,'#'), regexp_split_to_table(c3,'#')) FROM regexp_ext2_tb1 ORDER BY 1 LIMIT 5;
 coalesce
----------
 a
 a
 a
 a
 a
(5 rows)

ORA

TD

disable_select_truncate_parallel

控制分区表的truncate等ddl的锁等级。

  • 设置此配置项时,将禁止分区表的不同分区上truncate与DML(如select)的并发,允许分区表上select的FQS(快速下发)。在OLTP场景下分区表上的简单查询较多,并且没有分区表不同分区truncate与DML并发的需求,可以考虑设置此配置项。
  • 不设置此配置项时,分区表上不同分区的select与truncate可以并发进行,同时关闭分区表的FQS(快速下发)来避免可能的不一致问题。

ORA

TD

MySQL

bpchar_text_without_rtrim

Teradata兼容模式下,设置此参数时,控制bpchar到text转换保留右侧空格,如果实际长度不足bpchar指定的长度,对其进行补空格操作,兼容Teradata对bpchar字符串的处理风格。

当前不支持“比较字符串时忽略尾部空格”,拼接后结果如果存在尾部空格,进行比较时会对空格敏感。

例如,设置参数时:

td_compatibility_db=# SELECT length('a'::char(10)::text);
length
--------
10
(1 row)

td_compatibility_db=# SELECT length('a'||'a'::char(10));
length
--------
11
(1 row)

TD

convert_empty_str_to_null_td

Teradata兼容模式下,设置此参数时,控制to_date, to_timestamp和to_number类型转换函数处理空串时,返回null;同时控制to_char函数处理date类型入参时返回的格式。

例如:

未设置此参数时:

td_compatibility_db=# SELECT to_number('');
 to_number 
-----------
         0
(1 row)

td_compatibility_db=# SELECT to_date('');
ERROR:  the format is not correct
DETAIL:  invalid date length "0", must between 8 and 10.
CONTEXT:  referenced column: to_date

td_compatibility_db=# SELECT to_timestamp('');
      to_timestamp
------------------------
 0001-01-01 00:00:00 BC
(1 row)

td_compatibility_db=# SELECT to_char(date '2020-11-16');
        to_char         
------------------------
 2020-11-16 00:00:00+08
(1 row)

设置此参数,若to_number, to_date, to_timestamp函数的参数有空串时:

td_compatibility_db=# SELECT to_number('');
 to_number 
-----------

(1 row)

td_compatibility_db=# SELECT to_date('');
 to_date 
---------

(1 row)

td_compatibility_db=# SELECT to_timestamp('');
 to_timestamp
--------------

(1 row)

td_compatibility_db=# SELECT to_char(date '2020-11-16');
  to_char   
------------
 2020/11/16
(1 row)

TD

disable_case_specific

控制字符类型匹配时是否忽略大小写。仅在Teradata兼容模式下生效。

  • 不设置此配置项时,字符类型匹配时,字符的大小写敏感。
  • 设置此配置项时,字符类型匹配时,字符的大小写不敏感。

设置此配置项后会影响的字符类型包括CHAR、TEXT、BPCHAR、VARCHAR、NVARCHAR五种类型,会被影响的操作符包括<、>、=、>=、<=、!=、<>、!=、like、not like、in、not in共12种操作符以及case when、decode 表达式。

注意:

由于该配置项开启后,字符类型前会增加UPPER函数进而会影响估算逻辑,需要使用增强的估算模型。(建议设置:cost_param=16、cost_model_version = 1、join_num_distinct=-20、qual_num_distinct=200)

TD

enable_interval_to_text

控制interval到text类型的隐式转换功能。

  • 设置此选项时,支持interval类型到text类型的隐式转换。
    SELECT TO_DATE('20200923', 'yyyymmdd') - TO_DATE('20200920', 'yyyymmdd') = '3'::text;
    ?column?
    ----------
    f
    (1 row)
  • 不设置此选项时,不支持interval类型到text类型的隐式转换。
    SELECT TO_DATE('20200923', 'yyyymmdd') - TO_DATE('20200920', 'yyyymmdd') = '3'::text;
    ?column?
    ----------
    t
    (1 row)

ORA

TD

MySQL

case_insensitive

MySQL兼容模式下,设置此参数,控制locate,strpos,instr字符串函数入参大小写不敏感。

目前默认未设置该参数,即入参大小写敏感。

例如:

  • 未设置此选项时,入参大小写敏感。
    mysql_compatibility_db=# SELECT LOCATE('sub', 'Substr');
     locate
    --------
          0
    (1 row)
  • 设置此选项时,入参大小写不敏感。
    mysql_compatibility_db=# SELECT LOCATE('sub', 'Substr');
     locate
    --------
          1
    (1 row)

MySQL

inherit_not_null_strict_func

控制函数原有的strict属性,参数为1个的函数可以传递NOT NULL属性的行为。即:对于func(x),如果func()为strict属性,且x包含NOT NULL约束,则认为func(x)也是包含NOT NULL约束的。

该兼容配置项在某些优化场景,例如:NOT IN优化、COUNT(DISTINCT)优化,会有特定的优化效果,但特定场景可能导致结果错误。

目前默认未设置该参数,保证结果正确,但可能导致性能回退,如果出现问题可设置该参数回退到历史版本行为。

ORA

TD

MySQL

disable_compat_minmax_expr_mysql

MySQL兼容模式下,控制greatest/least表达式对null入参的处理方式。

默认兼容MySQL。可通过设置此参数,回退到历史版本行为。

  • 不设置此选项时,兼容MySQL行为,入参为null时返回null。
    mysql_compatibility_db=# SELECT greatest(1, 2, null), least(1, 2, null);
     greatest | least
    ----------+-------
              |
    (1 row)
  • 设置此选项时,返回非null参数中的最大/小值。
    mysql_compatibility_db=# SELECT greatest(1, 2, null), least(1, 2, null);
     greatest | least
    ----------+-------
            2 |     1
    (1 row)

MySQL

disable_compat_substr_mysql

MySQL兼容模式下,控制substr/substring函数在起始位置pos <= 0时的行为。

默认兼容MySQL。可通过设置此参数,回退到历史版本行为。

  • 不设置此选项时,兼容MySQL行为,即pos = 0时返回空串,pos < 0时从倒数第 |pos| 个位置开始截取字符。
    mysql_compatibility_db=# SELECT substr('helloworld',0);
     substr
    --------
    
    (1 row)
    mysql_compatibility_db=# SELECT substring('helloworld',0),substring('helloworld',-2,4);
     substring | substring
    -----------+-----------
               | ld
    (1 row)
  • 设置此选项时,pos <= 0时仍然从左侧开始截取字符。
    mysql_compatibility_db=# SELECT substr('helloworld',0);
       substr
    ------------
     helloworld
    (1 row)
    mysql_compatibility_db=# SELECT substring('helloworld',0),substring('helloworld',-2,4);
     substring  | substring
    ------------+-----------
     helloworld | h
    (1 row)

MySQL

disable_compat_trim_mysql

MySQL兼容模式下,控制trim/ltrim/rtrim函数对入参的处理方式。

默认兼容MySQL。可通过设置此参数,回退到历史版本行为。

  • 不设置此选项时,兼容MySQL行为,匹配完整子串。
    mysql_compatibility_db=# SELECT trim('{}{name}{}','{}'),trim('xyznamezyx','xyz');
     btrim  |  btrim
    --------+---------
     {name} | namezyx
    (1 row)
  • 设置此选项时,匹配字符集合中的单个字符。
    mysql_compatibility_db=# SELECT trim('{}{name}{}','{}'),trim('xyznamezyx','xyz');
     btrim | btrim
    -------+-------
     name  | name
    (1 row)

MySQL

light_object_mtime

控制pg_object系统表mtime字段是否会记录对象行为的操作。

  • 设置此选项时,GRANT/REVOKE/TRUNCATE操作不被mtime记录即不更新mtime字段。
  • 不设置此选项时(默认行为),ALTER操作、COMMENT、GRANT/REVOKE和TRUNCATE均会被mtime记录即更新mtime字段。

ORA

TD

MySQL

disable_including_all_mysql

MySQL兼容模式下,控制CREATE TABLE ... LIKE语法是否为INCLUDING_ALL模式。

默认不设置此参数,即MySQL兼容模式下,CREATE TABLE ... LIKE语法默认为INCLUDING_ALL模式。

可通过设置此参数,回退到历史版本行为。

  • 不设置此选项,MySQL兼容模式下,CREATE TABLE ... LIKE语法为INCLUDING_ALL模式。
    mysql_compatibility_db=# CREATE TABLE mysql_like(id int, name varchar(10), score int) distribute by hash(id) COMMENT 'mysql_like';
    CREATE TABLE
    mysql_compatibility_db=# CREATE index index_like on mysql_like(name);
    CREATE INDEX
    mysql_compatibility_db=# \d+ mysql_like;
                                 Table "public.mysql_like"
     Column |         Type          | Modifiers | Storage  | Stats target | Description
    --------+-----------------------+-----------+----------+--------------+-------------
     id     | integer               |           | plain    |              |
     name   | character varying(10) |           | extended |              |
     score  | integer               |           | plain    |              |
    Indexes:
        "index_like" btree (name) TABLESPACE pg_default
    Has OIDs: no
    Distribute By: HASH(id)
    Location Nodes: ALL DATANODES
    Options: orientation=row, compression=no
    
    mysql_compatibility_db=# CREATE table copy_like like mysql_like;
    CREATE TABLE
    mysql_compatibility_db=# \d+ copy_like;
                                  Table "public.copy_like"
     Column |         Type          | Modifiers | Storage  | Stats target | Description
    --------+-----------------------+-----------+----------+--------------+-------------
     id     | integer               |           | plain    |              |
     name   | character varying(10) |           | extended |              |
     score  | integer               |           | plain    |              |
    Indexes:
        "copy_like_name_idx" btree (name) TABLESPACE pg_default
    Has OIDs: no
    Distribute By: HASH(id)
    Location Nodes: ALL DATANODES
    Options: orientation=row, compression=no
  • 设置此选项,MySQL兼容模式下,CREATE TABLE ... LIKE语法为空模式。
    mysql_compatibility_db=# SET behavior_compat_options = 'disable_including_all_mysql';
    SET
    mysql_compatibility_db=# CREATE TABLE mysql_copy like mysql_like;
    NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default.
    HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
    CREATE TABLE
    mysql_db=# \d+ mysql_copy;
                                 Table "public.mysql_copy"
     Column |         Type          | Modifiers | Storage  | Stats target | Description
    --------+-----------------------+-----------+----------+--------------+-------------
     id     | integer               |           | plain    |              |
     name   | character varying(10) |           | extended |              |
     score  | integer               |           | plain    |              |
    Has OIDs: no
    Distribute By: ROUND ROBIN
    Location Nodes: ALL DATANODES
    Options: orientation=row, compression=no

MySQL

cte_onetime_inline

控制非stream计划是否执行inline。

  • 设置此选项时,非stream计划且只被引用一次的CTE执行inline。
  • 不设置此选项时,非stream计划且只被引用一次的CTE不执行inline。

ORA

TD

MySQL

skip_first_after_mysql

MySQL兼容模式下,控制是否在ALTER TABLE ADD/MODIFY/CHANGE COLUMN中忽略FIRST/AFTER colname语法。

  • 设置此选项时,将忽略FIRST/AFTER colname语法,执行不报错。
    mysql_compatibility_db=# SET behavior_compat_options = 'skip_first_after_mysql';
    mysql_compatibility_db=# ALTER TABLE t1 add column b text after a;
    ALTER TABLE
  • 不设置此选项时,将不支持FIRST/AFTER colname语法,执行报错。
    mysql_compatibility_db=# SET behavior_compat_options = '';
    mysql_compatibility_db=# ALTER TABLE t1 add column b text after a;
    ERROR:  FIRST/AFTER is not yet supported.

MySQL

enable_division_by_zero_mysql

MySQL兼容模式下,除数为0时,控制除法或取余操作是否报错。(该配置项仅8.1.3.110及以上集群版本支持。)

  • 设置此选项时,除法或取余操作中除数为0时,返回NULL。
    compatible_mysql_db=# SET behavior_compat_options = 'enable_division_by_zero_mysql';
    SET
    compatible_mysql_db=# SELECT 1/0 as test;
     test 
    ----------
             
    (1 row)
  • 不设置此选项时,除法或取余操作中除数为0时,执行报错。
    compatible_mysql_db=# SELECT 1/0;
    ERROR:  division by zero

MySQL

merge_into_with_trigger

控制是否支持对有触发器的表执行MERGE INTO操作。(该参数仅8.1.3.200及以上集群版本支持)。

  • 设置此选项时,可以对有触发器的表执行MERGE INTO操作。需注意在MERGE INTO操作执行时,表上的触发器不会被触发执行。
  • 不设置此选项时,对有触发器的表执行MERGE INTO操作时报错。

ORA

TD

MySQL

add_column_default_v_func

控制alter table add column default expression中expression是否支持volatile类型的函数。(该参数仅8.1.3.200及以上集群版本支持).

  • 设置此选项时,alter table add column default expression中的expression支持volatile类型的函数。
  • 不设置此选项时,alter table add column default expression中expression不支持volatile类型的函数,如果expression中有volatile的函数,该语句执行会报错。

ORA

TD

MySQL

disable_gc_fdw_filter_partial_pushdown

协同分析外表(类型为gc_fdw)场景,控制使用过滤条件查询外表数据时过滤条件的下推情况。(该参数仅8.1.3.310及以上集群版本支持)

  • 设置此选项时,过滤条件中若存在不满足下推条件的因素(如非immutable函数),为了保证结果集文档,则全部过滤条件不下推,此行为兼容8.1.3.310版本之前的行为。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    --源端集群建表
    CREATE TABLE t1(c1 INT, c2 INT, c3 INT) DISTRIBUTE BY HASH(c1);
    --本地集群建相同结构外表
    CREATE SERVER server_remote FOREIGN DATA WRAPPER gc_fdw options(ADDRESS 'address', DBNAME 'dbname', USERNAME 'username', PASSWORD 'password');
    CREATE FOREIGN TABLE t1(c1 INT, c2 INT, c3 INT) SERVER server_remote;
    --打开参数时,条件下推情况
    SET behavior_compat_options = 'disable_gc_fdw_filter_partial_pushdown';
    EXPLAIN (verbose on,costs off) SELECT * FROM t1 WHERE c1>3 AND c2 <100 AND now() - '20230101' < c3;
                                                                            QUERY PLAN                                                                        
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
     Streaming (type: GATHER)
       Output: c1, c2, c3
       Node/s: All datanodes
       ->  Foreign Scan on ca_schema.t1
             Output: c1, c2, c3
             Filter: ((t1.c1 > 3) AND (t1.c2 < 100) AND ((now() - '2023-01-01 00:00:00-08'::timestamp with time zone) < (t1.c3)::interval))
             Remote SQL: SELECT c1, c2, c3 FROM ca_schema.t1
    (7 rows)
    
  • 不设置此选项时,过滤条件中可下推的部分将下推到源端集群执行,不可下推部分将在本地集群执行,如此可提升外表查询效率。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    --关闭参数时,条件下推情况
    SET behavior_compat_options = '';
    EXPLAIN (verbose on,costs off) SELECT * FROM t1 WHERE c1>3 AND c2 <100 AND now() - '20230101' < c3;
                                                    QUERY PLAN                                                
    ----------------------------------------------------------------------------------------------------------
     Streaming (type: GATHER)
       Output: c1, c2, c3
       Node/s: All datanodes
       ->  Foreign Scan on ca_schema.t1
             Output: c1, c2, c3
             Filter: ((now() - '2023-01-01 00:00:00-08'::timestamp with time zone) < (t1.c3)::interval)
             Remote SQL: SELECT c1, c2, c3 FROM ca_schema.t1 WHERE ((c1 > 3)) AND ((c2 < 100))
    (7 rows)
    

ORA

TD

MySQL

normalize_negative_zero

控制ceil(),round()函数在处理float类型特定值时返回-0与否。该参数仅8.1.3.333及以上集群版本支持。

  • 设置此选项时,ceil()处理(-1,0),round()处理[-0.5, 0)时返回值会返回0。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    SET behavior_compat_options='normalize_negative_zero';
    SELECT ceil(cast(-0.1 as float));
     ceil
    ------
        0
    (1 row)
    SELECT round(cast(-0.1 as FLOAT));
     round
    -------
         0
    (1 row)
    
  • 不设置此选项时,ceil()处理(-1,0),round()处理[-0.5, 0)时返回值会返回-0。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    SET behavior_compat_options = '';
    SELECT ceil(cast(-0.1 as FLOAT));
     ceil 
    ------
       -0 
    (1 row)
    SELECT round(cast(-0.1 as FLOAT));
     round
    -------
        -0
    (1 row)
    

ORA

TD

MySQL

disable_client_detection_commit

控制在每次事务提交之前,检测与客户端的连接是否存在。如果不存在,则报错,回滚该事务,防止因断连未感知重复下发导致的数据重复问题。该参数仅8.1.3.333及以上集群版本支持。

  • 不设置此选项时,每次事务提交之前检测一次客户端连接是否存在。
  • 设置此选项时,事务提交之前不检测客户端连接是否存在。

ORA

TD

MySQL

enable_trunc_orc_string

控制orc格式外表字段为varchar(n),但是orc文件字段类型为string,且string长度超过n时,外表查询的行为。

该参数仅8.1.3.336、8.3.0.100、910.100及以上集群版本支持。

  • 不设置此选项时,查询报错,提示字段超长。
  • 设置此选项时,查询正常,按照varchar(n)定义长度进行截断。

ORA

TD

MySQL

gds_fill_multi_missing_fields

控制GDS外表容错性参数fill_missing_fields设置为true/on时的行为。在GDS外表fill_missing_fields设置为true/on时,允许数据源文件一行中最后若干字段缺失,处理方式是将这些字段设置为NULL。而在此之前,仅允许数据源文件一行中最后一个字段缺失,否则报错。该参数仅8.1.3.336、8.2.1.200、9.1.0.100及以上集群版本支持。

  • 设置此选项时,GDS外表允许数据源文件一行最后多个字段缺失。
  • 不设置此选项时,GDS外表允许数据源文件一行最后一个字段缺失。兼容历史行为。

ORA

TD

MySQL

internal_compat_options

参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。该参数仅8.1.3.333及以上集群版本支持。

参数类型:SIGHUP

取值范围:字符串

默认值:升级场景下保持前向兼容,即与升级前的集群中该参数的默认值保持一致。新安装集群场景下,该参数默认值为空。

表2 兼容性配置项

兼容性配置项

兼容性行为控制

light_proxy_permission_compat

light Proxy场景下嵌套查询权限配置项。

  • 不设置此配置项时,对于light Proxy场景下的嵌套查询,需要有查询权限。
  • 设置此配置项时,对于light Proxy场景下的嵌套查询,无论是否有权限都可以正常查询。

redact_compat_options

参数说明:设置数据脱敏可算不可见兼容性行为配置项。该参数仅8.1.3及以上集群版本支持。

参数类型:USERSET

取值范围:字符串

  • none表示未配置兼容项。
  • disable_comparison_operator_mask表示允许不存在暴露原始数据风险的比较操作符绕过脱敏检查,输出实际计算结果。

默认值:none

table_skewness_warning_threshold

参数说明:设置用于表倾斜告警的阈值。

参数类型:SUSET

取值范围:浮点型,0~1

默认值:1

table_skewness_warning_rows

参数说明:设置用于表倾斜告警的行数。

参数类型:SUSET

取值范围:整型,0~INT_MAX

默认值:100000

auto_process_residualfile

参数说明:控制残留文件记录功能的开关。

参数类型:SIGHUP

取值范围:布尔型

  • on表示打开残留文件记录功能。
  • off表示关闭残留文件记录功能。

默认值: off

enable_view_update

参数说明:用于设置是否开启视图更新功能。

参数类型:POSTMASTER

取值范围:布尔型

  • on表示启用视图更新功能。
  • off表示关闭视图更新功能。

默认值: off

view_independent

参数说明:用于设置是否开启视图与表、函数、同义词的解耦功能。基表恢复后目前已支持自动关联重建。

参数类型:SIGHUP

取值范围:布尔型

  • on表示启用视图解耦功能,存在视图依赖的表、函数、同义词及其他视图可以单独删除(临时表及临时视图除外),关联视图保留但不可用。
  • off表示关闭视图解耦功能,存在视图依赖的表、函数、同义词及其他视图不可以单独删除,仅可使用cascade级联删除。

默认值: off

bulkload_report_threshold

参数说明:设置导入导出统计信息上报阈值。设置导入导出统计信息上报阈值,在数据量大于该阈值时,通过PGXC_BULKLOAD_STATISTICS视图可以查询到同步数据量,记录数,执行时间等信息。

参数类型:SIGHUP

取值范围:整型,0~INT_MAX

默认值:50

assign_abort_xid

参数说明:查询时将指定的xid判断为需要abort的事务。

参数类型:USERSET

取值范围:指定xid的字符串

此参数只用于用户误删数据(delete操作)后进行快速恢复。其他场景禁止使用,否则造成事务可见性错误问题。

default_distribution_mode

参数说明用于设置表的默认分布方式。该参数仅8.1.2及以上版本支持。

参数类型:USERSET

取值范围:枚举类型
  • roundrobin,创建表不指定分布方式时,按如下规则选取默认分布方式:
    1. 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。
    2. 若建表时不包含主键/唯一约束,则选取ROUNDROBIN分布。
  • hash,创建表不指定分布方式时,按如下规则选取默认分布方式:
    1. 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。
    2. 若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。
    3. 若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。

默认值:roundrobin

新建8.1.2集群版本默认值为roundrobin,升级到8.1.2集群版本场景该参数的默认值为hash。