华为云云数据库GaussDB平台和客户端兼容性_云淘科技
很多平台都使用数据库系统,数据库系统的对外兼容性给平台提供了很大的方便。
transform_null_equals
参数说明:控制表达式expr = NULL(或NULL = expr)当做expr IS NULL处理。如果expr得出NULL值则返回真,否则返回假。
正确的SQL标准兼容的expr = NULL总是返回NULL(未知)。
Microsoft Access里的过滤表单生成的查询使用expr = NULL来测试空值。打开这个选项,可以使用该接口来访问数据库。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
on表示控制表达式expr = NULL(或NULL = expr)当做expr IS NULL处理。
off表示不控制,即expr = NULL总是返回NULL(未知)。
默认值:off
新用户经常在涉及NULL的表达式上语义混淆,故默认值设为off。
support_extended_features
参数说明:控制是否支持数据库的扩展特性。
该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
on表示支持数据库的扩展特性。
off表示不支持数据库的扩展特性。
默认值:off
lastval_supported
参数说明:控制是否可以使用lastval函数。
该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
on表示支持lastval函数,同时nextval函数不支持下推。
off表示不支持lastval函数,同时nextval函数可以下推。
默认值:off
group_concat_max_len
参数说明:搭配函数GROUP_CONCAT使用,限制其返回值长度,超长截断。分布式中暂不支持GROUP_CONCAT函数,故该参数可设置,但并无实际效果。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:0-9223372036854775807
默认值:1024
sql_compatibility
参数说明:控制数据库的SQL语法和语句行为同哪一个主流数据库兼容。该参数属于INTERNAL类型参数,用户无法修改,只能查看。
取值范围:枚举型
ORA表示同oracle兼容。
TD表示同Teradata兼容。
MYSQL表示同MySQL兼容。
PG表示同PostgreSQL兼容。
默认值:MYSQL
该参数只能在执行CREATE DATABASE命令(详见《开发者指南》的“SQL参考 > SQL语法 > CREATE DATABASE”章节)创建数据库的时候设置。
在数据库中,该参数只能是确定的一个值,要么始终设置为ORA,要么始终设置为TD,请勿任意改动,否则会导致数据库行为不一致。
behavior_compat_options
参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:“”
当前只支持平台和客户端兼容性。
配置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set behavior_compat_options=’end_month_calculate,display_leading_zero’;
兼容性配置项 |
兼容性行为控制 |
||||
---|---|---|---|---|---|
display_leading_zero |
浮点数显示配置项。控制数值类型中char、character、nchar、varchar、character varying、varchar2、nvarchar2、text、clob等所有字符串类型和float4、float8、numeric等任意精度类型的小数点前零显示。并且length计算数字长度同步显示。 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如:
设置此配置项时,对于-1~0和0~1之间的小数,显示小数点前的0。比如:
|
||||
end_month_calculate |
add_months函数计算逻辑配置项。 假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。 不设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期小,计算结果中的日期字段(Day字段)和param1的日期字段保持一致。比如,
设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期比小,计算结果中的日期字段(Day字段)和result的月末日期保持一致。比如,
|
||||
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 |
未指定模式名的存储过程中的数据库对象的搜索路径配置项。 在存储过程中如果不显示指定模式名,会优先在存储过程所属的模式下搜索。 如果找不到,则有两种情况: 若不设置此参数,报错退出。 |
||||
correct_to_number |
控制to_number()结果兼容性的配置项。 若不设置此配置项,则to_number()函数结果默认与ORA数据库保持一致。
若设置此配置项,则to_number()函数结果与pg11保持一致。
|
||||
unbind_divide_bound |
控制对整数除法的结果进行范围校验。 若不设置此配置项,则会对除法结果做范围校验,例如,INT_MIN/(-1)会因为输出结果大于INT_MAX而报越界错误。
若设置此配置项,则不需要对除法结果做范围校验,例如,INT_MIN/(-1)可以得到输出结果为INT_MAX+1。
|
||||
convert_string_digit_to_numeric |
控制是否将表中以字符串形式表示的numeric常量和数字类型做比较时统一都转换为numeric类型再进行比较。
|
||||
return_null_string |
控制函数lpad()和rpad()结果为空字符串”的显示配置项。 不设置此配置项时,空字符串显示为NULL。
设置此配置项时,空字符串显示为”。
|
||||
compat_concat_variadic |
控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。由于MYSQL数据库无variadic类型,所以该选项对MY数据库无影响。 若不设置此配置项,当concat函数参数为variadic类型时,默认ORA数据库和TD数据库兼容模式下结果相同,且与ORA数据库保持一致。
若设置此配置项,当concat函数参数为variadic类型时,保留ORA数据库和TD数据库兼容模式下不同的结果形式。
|
||||
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,不再需要用户手动更新。 以下情况支持建立依赖: 函数头中依赖类型和参数默认值位置出现函数。 以下情况不支持不建立依赖: Schema中类型依赖其他类型。 例如 select id into var1 from table1 join view1 on table1.id = pkg1.var1; table1,view1,pkg1均不记录依赖。 视图中对函数、变量、表、视图的依赖。 注意: 在并发创建PLSQL对象时,如果需要维护的对象间存在竞争关系,可能会造成死锁。 |
||||
disable_rewrite_nesttable |
分布式不支持。 |
||||
proc_outparam_override |
控制存储过程出参的重载行为,打开该参数后,对于存储过程只有out出参部分不同的情况下,也可以正常创建和调用。目前只有gsql与jdbc连接数据库时可以使用该参数,对于其他工具打开该参数连接数据库时无法正常调用带有out的存储过程。 支持带有out出参的函数返回record类型,且out出参正常赋值。 |
||||
aformat_regexp_match |
控制正则表达式函数的匹配行为。 设置此项,且sql_compatibility参数的值为ORA或MYSQL时,正则表达式的 flags 参数支持的选项含义有变更: 默认不能匹配 ‘ 否则,正则表达式的 flags 参数支持的选项含义: 默认能匹配 ‘ |
||||
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选项。 |
||||
dynamic_sql_check |
开启此参数后,动态语句模板SQL中的不同模板参数个数与using子句中的变量个数不同时将会在动态语句执行期间报错。 注意: 不推荐同时使用dynamic_sql_check选项和dynamic_sql_compat选项,开启dynamic_sql_compat选项后dynamic_sql_check选项将不再生效。 |
||||
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关键字,不支持带有其他关键字时显示完整函数。 |
||||
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) |
a_format_version
参数说明:数据库平台兼容性行为配置项,该参数的值为字符串枚举值。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:””
当前只支持兼容性配置项如表2所示。
兼容性配置项时设置字符串,例如:set a_format_version=’10c’;
兼容性配置项 |
兼容性行为控制 |
---|---|
10c |
ORA平台兼容10C版本 |
a_format_dev_version
参数说明:数据库平台迭代小版本兼容性行为配置项,该参数的值为字符串枚举值。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:””
当前只支持兼容性配置项如表3所示。
兼容性配置项时设置字符串,例如:set a_format_dev_version=’s1′;
兼容性配置项 |
兼容性行为控制 |
---|---|
s1 |
ORA平台兼容迭代小版本,影响函数(TRUNC(date, fmt),ROUND(date, fmt),NVL2,LPAD,RPAD,ADD_MONTHS,MONTHS_BETWEEN,REGEXP_REPLACE,REGEXP_COUNT,TREAT,EMPTY_CLOB,INSTRB,trunc(number),greatest,least,mod,round(number),cast,to_date,to_timestamp,chr,rtrim,translate,to_char,to_number,to_timestamp_tz)。 |
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)。 |
plpgsql.variable_conflict
参数说明:设置同名的存储过程变量和表的列的使用优先级。
该参数属于USERSET类型参数,仅支持表1中对应设置方法3进行设置。
取值范围:字符串
error表示遇到存储过程变量和表的列名同名则编译报错。
use_variable表示存储过程变量和表的列名同名则优先使用变量。
use_column表示存储过程变量和表的列名同名则优先使用列名。
默认值:error
td_compatible_truncation
参数说明:控制是否开启与Teradata数据库相应兼容的特征。该参数在用户连接上与TD兼容的数据库时,可以将参数设置成为on(即超长字符串自动截断功能启用),该功能启用后,在后续的insert语句中,对目标表中char和varchar类型的列插入超长字符串时,会按照目标表中相应列定义的最大长度对超长字符串进行自动截断。保证数据都能插入目标表中,而不是报错。
超长字符串自动截断功能不适用于insert语句包含外表的场景。
如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
on表示启动超长字符串自动截断功能。
off表示停止超长字符串自动截断功能。
默认值:off
nls_timestamp_format
参数说明:设置时间戳默认格式。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:DD-Mon-YYYY HH:MI:SS.FF AM
nls_timestamp_tz_format
参数说明:设置带时区时间戳默认格式。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串,支持格式同nls_timestamp_format。
默认值:DD-Mon-YYYY HH:MI:SS.FF AM
此参数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
max_function_args
参数说明:函数参数最大个数。
该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。
取值范围:整型
默认值:8192
convert_string_to_digit
参数说明:设置隐式转换优先级,是否优先将字符串转为数字。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
on表示优先将字符串转为数字。
off表示不优先将字符串转为数字。
默认值:on
该参数调整会修改内部数据类型转换规则,导致不可预期的行为,请谨慎调操作。
父主题: 版本和平台兼容性
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家