display_leading_zero |
浮点数显示配置项。控制数值类型中char、character、nchar、varchar、character varying、varchar2、nvarchar2、text、clob等所有字符串类型和float4、float8、numeric等任意精度类型的小数点前零显示。并且length计算数字长度同步显示。
- 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如:
|
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。比如:
|
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函数计算逻辑配置项。
假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。
- 不设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期小,计算结果中的日期字段(Day字段)和param1的日期字段保持一致。比如,
|
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的月末日期保持一致。比如,
|
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时全局采样会更精确的控制在3万条左右,更好的控制analyze时Coordinator端的内存消耗,保证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()函数结果默认与ORA数据库保持一致。
|
gaussdb=# select '' AS to_number_14, to_number('34,50','999,99');
ERROR: invalid data.
CONTEXT: referenced column: to_number
|
若设置此配置项,则to_number()函数结果与pg11保持一致。
|
gaussdb=# select '' AS to_number_14, to_number('34,50','999,99');
to_number_14 | to_number
--------------+-----------
| 3450
(1 row)
|
|
unbind_divide_bound |
控制对整数除法的结果进行范围校验。
若不设置此配置项,则会对除法结果做范围校验,例如,INT_MIN/(-1)会因为输出结果大于INT_MAX而报越界错误。
|
gaussdb=# select (-2147483648)::int4 / (-1)::int4;
ERROR: integer out of range
|
若设置此配置项,则不需要对除法结果做范围校验,例如,INT_MIN/(-1)可以得到输出结果为INT_MAX+1。
|
gaussdb=# select (-2147483648)::int4 / (-1)::int4;
?column?
------------
2147483648
(1 row)
|
|
convert_string_digit_to_numeric |
控制是否将表中以字符串形式表示的numeric常量和数字类型做比较时统一都转换为numeric类型再进行比较。
1
2
3
4
5
6
7
8
9
10
11
12
|
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)
|
|
return_null_string |
控制函数lpad()和rpad()结果为空字符串''的显示配置项。
|
gaussdb=# select length(lpad('123',0,'*')) from sys_dummy;
length
--------
(1 row)
|
|
gaussdb=# select length(lpad('123',0,'*')) from sys_dummy;
length
--------
0
(1 row)
|
|
compat_concat_variadic |
控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。由于MYSQL数据库无variadic类型,所以该选项对MY数据库无影响。
若不设置此配置项,当concat函数参数为variadic类型时,默认ORA数据库和TD数据库兼容模式下结果相同,且与ORA数据库保持一致。
|
gaussdb=# select concat(variadic NULL::int[]) is NULL;
?column?
----------
t
(1 row)
|
若设置此配置项,当concat函数参数为variadic类型时,保留ORA数据库和TD数据库兼容模式下不同的结果形式。
1
2
3
4
5
6
7
8
9
10
11
12
|
--ORA数据库下:
gaussdb=# select concat(variadic NULL::int[]) is NULL;
?column?
----------
t
(1 row)
--TD数据库下:
gaussdb=# select concat(variadic NULL::int[]) is NULL;
?column?
----------
f
(1 row)
|
|
merge_update_multi |
控制在使用MERGE INTO ... WHEN MATCHED THEN UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > MERGE INTO”章节)和INSERT ... ON DUPLICATE KEY UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > INSERT”章节)时,当目标表中一条目标数据与多条源数据冲突时UPDATE行为。
若设置此配置项,当存在上述场景时,该冲突行将会多次执行UPDATE;否则(默认)报错,即MERGE或INSERT操作失败。 |
plstmt_implicit_savepoint |
控制存储过程中更新语句的执行是否拥有独立的子事务。
若设置此配置项,存储过程中每条更新语句前开启隐式保存点,EXCEPTION块中默认回退到最近的保存点,从而保证只回退失败语句的修改。该选项是为了兼容O数据库的EXCEPTION行为。 |
hide_tailing_zero |
numeric显示配置项。不设置此项时,numeric按照指定精度显示;设置此项时,所有输出numeric的场景均隐藏小数点后的末尾0,包括显示指定format精度情况。
例如:
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) |
plsql_security_definer |
开启此参数后,创建存储过程时默认为定义者权限。 |
char_coerce_compat |
控制char(n)类型向其它变长字符串类型转换时的行为。不设置该参数时,char(n)类型转换其它变长字符串类型时会省略尾部的空格,设置该参数时,转换时不再省略尾部的空格,并且在转换时如果char(n)类型的长度超过其它变长字符串类型时将会报错。该参数仅在sql_compatibility参数的值为ORA时生效,并且开启该参数后无论是隐式转换、显式转换还是通过调用text(bpchar)函数转换类型都不再省略尾部空格。
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) |
truncate_numeric_tail_zero |
numeric显示配置项。不设置此项时,numeric按照默认精度显示;设置此项时,除去to_char(numeric, format)这种显示设置精度的情况,所有输出numeric的场景均会隐藏小数点后的末尾0。例如:
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) |
plpgsql_dependency |
开启此参数后,创建函数,存储过程支持未定义的对象。可以新建成功。可以在GS_DEPENDENCIES和GS_DEPENDENCIES_OBJ查询对应的依赖关系。
开启此参数后,创建PLSQL对象时,会主动维护依赖于该PLSQL对象的OID,不再需要用户手动更新。
以下情况支持建立依赖:
- 函数头中依赖类型和参数默认值位置出现函数。
- 函数中类型、变量依赖类型。
- 函数体中,函数调用、赋值语句右值表达式中调用函数A,函数A出入参包含函数B时,函数B不建立依赖。例如functionA(functionB())。仅建立和函数A的依赖。
- 视图中依赖函数。
以下情况不支持不建立依赖:
- Schema中类型依赖其他类型。
- SQL语句中对函数、变量、表、视图的依赖。
例如 select id into var1 from table1 join view1 on table1.id = pkg1.var1; table1,view1,pkg1均不记录依赖。
- 视图中对函数、变量、表、视图的依赖。
注意:
- 在并发创建PLSQL对象时,如果需要维护的对象间存在竞争关系,可能会造成死锁。
- 当修改对象在gs_dependencies和gs_dependencies_obj中存在时,不允许进行rename操作。
- 当函数,存储过程,包依赖同义词时,该同义词必须提前建立,不支持主动维护oid。
|
disable_rewrite_nesttable |
分布式不支持。 |
proc_outparam_override |
控制存储过程出参的重载行为,打开该参数后,对于存储过程只有out出参部分不同的情况下,也可以正常创建和调用。目前只有gsql与jdbc连接数据库时可以使用该参数,对于其他工具打开该参数连接数据库时无法正常调用带有out的存储过程。
支持带有out出参的函数返回record类型,且out出参正常赋值。 |
aformat_regexp_match |
控制正则表达式函数的匹配行为。
设置此项,且sql_compatibility参数的值为ORA或MYSQL时,正则表达式的 flags 参数支持的选项含义有变更:
- 默认不能匹配 '\n' 字符。
- flags 中包含n选项时, . 能够匹配 '\n' 字符。
- regexp_replace(source, pattern replacement) 函数替换所有匹配的子串。
- regexp_replace(source, pattern, replacement, flags) 在 flags值为'' 或者null时,返回值为null。
否则,正则表达式的 flags 参数支持的选项含义:
- 默认能匹配 '\n' 字符。
- flags 中的 n 选项表示按照多行模式匹配。
- regexp_replace(source, pattern replacement) 函数仅替换第一个匹配到的子串。
- regexp_replace(source, pattern, replacement, flags) 在 flags值为'' 或者null时,返回值为替换后的字符串。
|
disable_emptystr2null |
开启此参数后,关闭所有字符类型默认将空串转换为null功能。包括text、clob、blob、raw、bytea、varchar、nvarchar2、bpchar、char、name、byteawithoutorderwithqualcol、byteawithoutordercol类型。该参数为逃生参数,非必要用户不要自行设置。 |
select_into_return_null |
该参数在分布式场景下无效。 |
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=# 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)
如上,f3被错误的默认值填充。
|
dynamic_sql_compat |
开启此参数后,动态语句不会将模板SQL中的同名模板参数视为同一个变量,而是按照顺序依次匹配using子句中的变量值。
注意:
- 动态语句执行匿名块语句时调用存储过程的场景,只针对IN参数进行矫正,如果需要对OUT参数进行检查需要设置proc_outparam_override选项。
- 动态语句执行匿名块语句时调用存储过程的场景,开启参数后不会对存储过程中参数的IN/OUT属性和using子句中的IN/OUT属性进行检查。
|
dynamic_sql_check |
开启此参数后,动态语句模板SQL中的不同模板参数个数与using子句中的变量个数不同时将会在动态语句执行期间报错。
注意:
- 不推荐同时使用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关键字,不支持带有其他关键字时显示完整函数。
- 一些特殊函数不支持投影别名显示完整函数,包括函数: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函数。
- 一些安全加解密函数、脱敏函数,投影别名显示完整函数可能存在安全问题,在这里就还是仅显示函数名。包括函数:gs_encrypt_aes128,gs_decrypt_aes128,gs_encrypt,gs_decrypt,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等参数影响。
|
allow_rownum_alias |
开启此参数后,将允许ROWNUM在SQL语句中通过AS语法用作列的别名,ROWNUM将作为普通标识符使用,不再能够作为伪列使用。
警告:
不建议在执行业务期间变更该参数的状态。开启参数的状态下,在数据库中用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) |