display_leading_zero |
浮点数显示配置项。
- 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如,0.25显示为.25。
- 设置此配置项时,对于-1~0和0~1之间的小数,显示小数点前的0。比如,0.25显示为0.25。
例如,某数据迁移场景中,在导入时若未设置该参数,浮点数显示或者转为字符串的时候,缺少前面的0,导致出现类似如下报错。
|
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的日期字段保持一致。比如,
|
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的月末日期保持一致。比如,
|
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()的结果为空字符串''的显示配置项。
|
select length(lpad('123',0,'*')) from dual;
length
--------
(1 row)
|
|
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运算时类型转换优先级的配置项。
注意:
此配置项只对二元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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-- 场景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()入参是否支持多结果集表达式。
- 不设置此配置项时,函数入参包含多结果集表达式时,直接报错不支持。
|
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
|
|
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类型入参时返回的格式。
例如:
未设置此参数时:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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函数的参数有空串时:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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模式。
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
|
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语法为空模式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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 |
normal_session_id |
控制是否生成normal格式的会话ID。
- 设置此选项时,生成normal格式的会话ID,兼容8.1.3及之前集群版本的会话ID。
|
SET behavior_compat_options='normal_session_id';
SELECT pg_current_sessionid();
pg_current_sessionid
----------------------------
1660268184.140594655524608
(1 row)
|
- 不设置此选项时,生成pretty格式的会话ID。
|
SET behavior_compat_options='';
SELECT pg_current_sessionid();
pg_current_sessionid
-----------------------------------------
1660268184.140594655524608.coordinator1
(1 row)
|
|
ORA
TD
MySQL |
disable_jsonb_exact_match |
控制操作符匹配规则,在对二元操作符进行模糊匹配时是否考虑jsonb类型。(该参数仅8.2.0及以上集群版本支持)
- 设置此选项时,当对操作符进行模糊匹配时,会在所有备选(即不区分jsonb类型)中匹配,兼容8.1.1到8.1.3集群版本的匹配规则。
|
SET behavior_compat_options='disable_jsonb_exact_match';
select '2022' - '2'::text;
ERROR: cannot delete from scalar
|
- 不设置此选项时,当对操作符进行模糊匹配时,会在不含jsonb类型的备选中匹配,兼容8.1.1之前集群版本的匹配规则。
|
SET behavior_compat_options='';
select '2022' - '2'::text;
?column?
----------
2020
(1 row)
|
|
ORA
TD
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_full_group_by_mysql |
MySQL兼容模式下,控制查询中GROUP BY后是否可以不体现任何非聚合函数查询字段。(该参数仅8.2.0.101及以上集群版本支持)
- 设置此选项时,查询允许GROUP BY后不体现任何非聚合函数查询字段。
|
SET behavior_compat_options='disable_full_group_by_mysql';
SELECT a,b FROM t1 GROUP BY a;
a | b
---+---
1 | 1
2 | 2
(2 rows)
|
- 不设置此选项时,查询不允许GROUP BY后不体现任何非聚合函数查询字段,查询报错。
|
SET behavior_compat_options='';
SELECT a,b FROM t1 GROUP BY a;
ERROR: column "t1.b" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT a,b FROM t1 GROUP BY a;
|
注意:
该参数需结合full_group_by_mode使用,具体请参考full_group_by_mode。
此配置项配置后,若full_group_by_mode为notpadding,对于非GROUP BY后非聚合查询字段需要保证分组后数据一致,否则该列将为随机值。
|
MySQL |
disable_gc_fdw_filter_partial_pushdown |
协同分析外表(类型为gc_fdw)场景下,控制使用过滤条件查询外表数据时过滤条件的下推情况。(该参数仅8.2.1及以上集群版本支持)
- 设置此选项时,过滤条件中若存在不满足下推条件的因素(如非immutable函数),为了保证结果集文档,则全部过滤条件不下推,此行为兼容8.2.1版本之前的行为。
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
|
ignore_unshipped_concurrent_update |
并发更新场景下,当前会话的语句不下推时,如果更新的元组被其它会话更新成新元组后,控制当前会话执行UPDATE/DELETE语句时是否忽略处理新的元组。默认不再处理新的元组。(该参数仅8.2.1及以上集群版本支持)
- 设置此选项时,当前会话执行UPDATE/DELETE语句时忽略处理新的元组,当前UPDATE/DELETE语句执行成功,此行为会导致并发更新场景数据不一致。此行为兼容8.2.1版本之前的行为。
- 不设置此选项时,当前会话执行UPDATE/DELETE语句检测元组已被更新时,会重新执行当前会话的UPDATE/DELETE语句,以保证数据一致性。语句执行重试次数受max_query_retry_times参数控制。
|
ORA
TD
MySQL |
disable_set_global_var_on_datanode |
控制set_config函数是否可以在DN上设置全局变量。(该参数仅8.2.1及以上集群版本支持)
- 设置此选项时,禁止set_config函数在DN上设置全局变量。此行为默认兼容8.2.1版本之前的行为。
- 不设置此选项时,允许set_config函数在DN上设置全局变量,这将会使得CN与DN上全局变量值不一致,导致read_global_var函数下推时可能出错。
|
ORA
TD
MySQL |
variadic_null_check |
控制variadic参数是否能传入NULL参数的选项,默认不开启。(该参数仅8.2.1.300及以上集群版本支持)
- 设置此选项时,禁止variadic传入NULL参数,传入后会报错。
|
SET behavior_compat_options = 'variadic_null_check';
SELECT format ( 'array', VARIADIC NULL);
ERROR: VARIADIC parameter must be an array
|
说明:
为了兼容mysql,compat_concat_variadic开启时,对concat函数和concat_ws函数不会生效,仍然可以传入NULL参数。
- 不设置此选项时,允许variadic传入NULL参数。
|
SET behavior_compat_options = '';
SELECT format ( 'array', VARIADIC NULL);
format
--------
array
(1 row)
|
|
ORA
TD
MySQL |
enable_use_syscol_in_replicate_table |
控制复制表在INSERT、UPDATE、MERGE INTO和DELETE时是否可以采用oid/ctid/tableoid/xc_node_id作为过滤条件、连接条件和having条件。该选项默认不设置。该选项仅8.2.1.200及以上集群版本支持。
- 不设置该选项时,如果复制表在INSERT、UPDATE、MERGE INTO和DELETE时采用oid/ctid/tableoid/xc_node_id作为过滤条件、连接条件和having条件,会报如下错误:
|
ERROR: Can not use system column oid/ctid/tableoid/xc_node_id in Replication Table.
|
- 设置该选项时,可在复制表中使用系统列id/ctid/tableoid/xc_node_id进行INSERT、UPDATE、MERGE INTO和DELETE。
注意:
复制表在INSERT、UPDATE、MERGE INTO和DELETE时采用oid/ctid/tableoid/xc_node_id作为过滤条件、连接条件和having条件,语句有导致集群core的风险,请慎重考虑配置该选项。
|
ORA
TD
MYSQL |
enable_force_add_batch |
当参数support_batch_bind设置为on且参数enable_fast_query_shipping和enable_light_proxy设置off时,该选项控制GaussDB(DWS)是否接受addbatch模式的U报文。该选项默认不设置。该选项仅8.2.1.200及以上集群版本支持。
- 当参数support_batch_bind设置为on且参数enable_fast_query_shipping和enable_light_proxy设置off,不设置该选项时,GaussDB(DWS)不再接收addbatch模式的U报文。
- 当参数support_batch_bind设置为on且参数enable_fast_query_shipping和enable_light_proxy设置off,设置该选项时,GaussDB(DWS)接收addbatch模式的U报文。但是入库速度较慢,有内存不足风险,需谨慎设置该选项。
|
ORA
TD
MYSQL |
disable_mergesort_without_material |
控制当前stream片段是否含有物化算子时stream算子采用merge sort。该选项仅8.2.1.100及以上集群版本支持。
- 设置此选项时,若当前stream片段含有物化算子(material、sort、agg、CteScan),则可采用merge sort,否则不可采用merge sort。
- 不设置此选项时,是否采用merge sort不需要判断当前stream片段是否含有物化算子。
|
ORA
TD
MYSQL |
enable_pushdown_groupingset_subquery |
当子查询中含有grouping set时,该选项控制是否可将外层查询中仅与该子查询相关的条件下推到子查询中。该选项仅8.2.1.100及以上集群版本支持。
- 当子查询中含有grouping set时,设置此选项,则不可将外层查询的条件下推到子查询中。
- 当子查询中含有grouping set时,不设置此选项,则将外层查询的条件下推到子查询中。
|
ORA
TD
MYSQL |
enable_whole_row_var |
该参数主要涉及两个场景。1. 控制是否允许表或视图出现在SQL表达式中,包括但不限于查询的目标列表、GROUP BY列表等;2. 控制是否允许非表的record出现的SQL表达式。该选项仅8.3.0及以上集群版本支持。
- 设置此选项时,允许表或视图出现在SQL表达式中。
|
SET behavior_compat_options = 'enable_whole_row_var';
SELECT a1 FROM t a1;
a1
----
(0 rows)
SELECT t FROM (SELECT 1) as t;
t
-----
(1)
(1 rows)
|
- 不设置此选项时,不允许表或视图出现在SQL表达式中,如果SQL中出现则报错。
|
SET behavior_compat_options = '';
SELECT a1 FROM t a1;
ERROR: Table or view cannot appear in expression. Table/view name: t, alias: a1. Please check targetList, groupClause etc.
SELECT t FROM (SELECT 1) as t;
ERROR: Non-table records cannot appear in expression. alias: t. Please check targetList, groupClause etc.
|
|
ORA
TD
MYSQL |
enable_unknown_datatype |
控制是否允许创建含有unknown类型列的表。该选项仅8.3.0及以上集群版本支持。
- 设置此选项时,允许创建含有unknown类型列的表。
|
SET behavior_compat_options = 'enable_unknown_datatype';
CREATE TABLE t(a unknown);
WARNING: column "a" has type "unknown"
DETAIL: Proceeding with relation creation anyway.
CREATE TABLE
|
- 不设置此选项时,不允许创建含有unknown类型列的表,如果建表SQL含有unknown列,则报错。
|
SET behavior_compat_options = '';
create table t(a unknown);
ERROR: column "a" has type "unknown"
|
|
ORA
TD
MYSQL |
alter_distribute_key_by_partition |
控制ALTER TABLE修改分区表分布列时INSERT INTO是否按分区执行。
- 设置此选项时,按分区执行INSERT INTO,使用内存降低但性能劣化。
- 不设置此选项时,将分区表整表进行INSERT INTO,性能较好但使用内存较多。
|
ORA
TD
MYSQL |
disable_update_returning_check |
控制是否禁用涉及到多表关联,更新复制表且带returning语句场景。该选项仅8.3.0及以上集群版本支持。
- 不设置此选项时,更新复制表且带returning语句场景,若涉及到多表关联,则报下述错误:
|
ERROR: Unsupported FOR UPDATE replicated table joined with other table.
|
- 设置此选项,与旧版本前向兼容,但是在更新复制表且带returning语句场景,若涉及到多表关联,存在结果集不一致问题。
|
ORA
TD
MYSQL |
check_function_shippable |
控制是否检查自定义plpgsql/SQL函数的属性。该选项仅8.3.0及以上集群版本支持。
- 不设置此配置项时,不检查自定义函数的IMMUTABLE/STABLE/VOLATILE属性。
- 设置此配置项时,会遵循以下逻辑检查自定义函数的IMMUTABLE/STABLE/VOLATILE属性:
- 设置白名单:对于DBMS_OUTPUT的3个函数,跳过check_function_shippable的检测。
- 如果自定义函数内部有DML语句,外层是IMMUTABLE或者SHIPPABLE,均是下推,故报错。
- 如果自定义函数外层是shippable,内层是immutable,则通过检查。
- 如果自定义函数外层是shippable,内层是非immutable且内层是shippable,则通过检查。
- 如果函数外层是shippable,但是内层非上述的情况,则报错。
例如:设置此参数时,以下场景下会执行报错:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
CREATE OR replace function func_ship(a int)
returns int
LANGUAGE plpgsql
NOT FENCED SHIPPABLE
AS $function$
begin
perform test_ship();
return a;
EXCEPTION WHEN OTHERS THEN
return a;
end $function$;
select func_ship(a) from tt3;
ERROR: parent function is shippable but child is not immutable or shippable.
|
|
ORA
TD
MYSQL |
enable_full_string_agg |
控制string_agg(a, delimeter) over (partition by b order by c)场景行为,采用窗口内的全量聚合逻辑还是增量聚合逻辑。该参数8.3.0及以上集群版本支持。
不设置此选项时,采用增量聚合逻辑。设置此选项时,采用窗口内的全量聚合逻辑。默认不设置此选项。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
CREATE TABLE string_agg_dn_col(c1 int, c2 text) WITH(orientation = column) distribute by hash(c1);
INSERT INTO string_agg_dn_col values(1, 'test');
INSERT INTO string_agg_dn_col values(1, 'haidian');
INSERT INTO string_agg_dn_col values(1, 'nanjing');
SELECT t.c1 AS c1, string_agg(t.c2, ',') OVER(PARTITION BY t.c1 ORDER BY t.c2) AS c2 FROM string_agg_dn_col t ORDER BY c2;
c1 | c2
----+----------------------
1 | haidian
1 | haidian,nanjing
1 | haidian,nanjing,test
(3 rows)
SET behavior_compat_options='enable_full_string_agg';
SELECT t.c1 AS c1, string_agg(t.c2, ',') OVER(PARTITION BY t.c1 ORDER BY t.c2) AS c2 FROM string_agg_dn_col t ORDER BY c2;
c1 | c2
----+----------------------
1 | haidian,nanjing,test
1 | haidian,nanjing,test
1 | haidian,nanjing,test
(3 rows)
|
|
ORA
TD
MYSQL |
enable_banker_round |
控制数值类型舍入行为使用四舍五入还是银行家算法。该选项仅8.3.0及以上集群版本支持。
受到参数控制的行为包括:
- INSERT INTO和::xxx指定类型时自动触发的类型转换:所有整数类型(int1,int2,int4,int8)、所有任意精度类型(decimal,numeric,number)和money类型。
- 对numeric类型的舍入和转换函数:round(xxx.xx,s),cast('xxx.xx',numeric),to_char(xxx.xx,'xxx')。
- numeric类型的数学计算。
说明:
银行家算法舍入规则:舍入位后的值大于5时,进位;舍入位后的值小于5时,不进位;舍入位后的值等于5时,如果前一位为偶数则不进位,如果前一位为奇数则进位。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SET behavior_compat_options = enable_banker_round;
SELECT 1.5::int1,1.5::int2,1.5::int4,1.5::int8,1.5::numeric(10,0),1.115::money;
int1 | int2 | int4 | int8 | numeric | money
------+------+------+------+---------+-------
2 | 2 | 2 | 2 | 2 | $1.12
SELECT 0.5::int1,0.5::int2,0.5::int4,0.5::int8,0.5::numeric(10,0),1.105::money;
int1 | int2 | int4 | int8 | numeric | money
------+------+------+------+---------+-------
0 | 0 | 0 | 0 | 0 | $1.10
SELECT round(1.05,1),round(1.15,1),cast('1.05',numeric(10,1)),cast('1.15',numeric(10,1)),to_char(1.05,'9D9'),to_char(1.15,'9D9');
round | round | numeric | numeric | to_char | to_char
-------+-------+---------+---------+---------+---------
1.0 | 1.2 | 1.0 | 1.2 | 1.0 | 1.2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SET behavior_compat_options = '';
SELECT 1.5::int1,1.5::int2,1.5::int4,1.5::int8,1.5::numeric(10,0),1.115::money;
int1 | int2 | int4 | int8 | numeric | money
------+------+------+------+---------+-------
2 | 2 | 2 | 2 | 2 | $1.12
SELECT 0.5::int1,0.5::int2,0.5::int4,0.5::int8,0.5::numeric(10,0),1.105::money;
int1 | int2 | int4 | int8 | numeric | money
------+------+------+------+---------+-------
1 | 1 | 1 | 1 | 1 | $1.11
SELECT round(1.05,1),round(1.15,1),cast('1.05',numeric(10,1)),cast('1.15',numeric(10,1)),to_char(1.05,'9D9'),to_char(1.15,'9D9');
round | round | numeric | numeric | to_char | to_char
-------+-------+---------+---------+---------+---------
1.1 | 1.2 | 1.1 | 1.2 | 1.1 | 1.2
|
|
ORA
TD
MYSQL |
enable_int_division_by_truncate |
控制整数除法行为结果集输出整数还是浮点数,行为兼容PG或者兼容ORA。该选项仅8.3.0.100及以上集群版本支持。
- 设置此选项时,整数除法结果输出整数,小数位截断,兼容PG行为。
SET behavior_compat_options = 'enable_int_division_by_truncate';
SELECT 8::int8 / 3::int8, 8::int4 / 3::int4, 8::int2 / 3::int2, 8::int1 / 3::int1;
?column? | ?column? | ?column? | ?column?
----------+----------+----------+----------
2 | 2 | 2 | 2
(1 row)
- 不设置此选项时,整数除法结果输出浮点数,包含小数位,兼容ORA行为。
SET behavior_compat_options = '';
SELECT 8::int8 / 3::int8, 8::int4 / 3::int4, 8::int2 / 3::int2, 8::int1 / 3::int1;
?column? | ?column? | ?column? | ?column?
------------------+------------------+------------------+------------------
2.66666666666667 | 2.66666666666667 | 2.66666666666667 | 2.66666666666667
(1 row)
|
ORA
TD
MYSQL |
unsupported_set_function_case |
控制是否支持case when条件中含有返回为多结果集函数。该选项仅8.3.0.100及以上集群版本支持。
- 设置此选项时,列存不支持case when条件中含有返回为多结果集函数:
CREATE TABLE t1(id int, c1 text) with(orientation=column);
INSERT INTO t1 values(1, 'a#1');
SET behavior_compat_options = 'unsupported_set_function_case';
SELECT CASE split_part(regexp_split_to_table(c1, E'\,'),'#',1) when 'a' then c1 else null end from t1;
ERROR: set-valued function called in context that cannot accept a set
- 不设置此选项时,列存支持case when条件中含有返回为多结果集函数:
SET behavior_compat_options = '';
SELECT CASE split_part(regexp_split_to_table(c1, E'\,'),'#',1) when 'a' then c1 else null end from t1;
case
------
a#1
(1 row)
|
ORA
TD
MYSQL |
normalize_negative_zero |
控制ceil(),round()函数在处理float类型特定值时返回-0与否。该参数仅8.1.3.333及以上集群版本支持。
- 设置此选项时,ceil()处理(-1,0),round()处理[-0.5, 0)时返回值会返回0。
|
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。
|
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 |
change_illegal_char |
控制gds读取UTF8非法字符的显示问题。
该选项打开时,gds读取到UTF8不兼容的非法字符从“?”变为显示“�”。
该选项仅8.3.0.100及以上集群版本支持。 |
MySQL |
enable_trunc_orc_string |
控制orc格式外表字段为varchar(n),但是orc文件字段类型为string,且string长度超过n时,外表查询的行为。该参数仅8.1.3、8.3.0.100、910.100及以上集群版本支持。
- 不设置此选项时,查询报错,提示字段超长。
- 设置此选项时,查询正常,按照varchar(n)定义长度进行截断。
|
ORA
TD
MySQL |