平台和客户端兼容性
很多平台都使用数据库系统,数据库系统的对外兼容性给平台提供了很大的方便。
convert_string_to_digit
参数说明:设置隐式转换优先级,是否优先将字符串转为数字。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on表示优先将字符串转为数字。
- off表示不优先将字符串转为数字。
默认值:on
该参数调整会修改内部数据类型转换规则,导致不可预期的行为,请谨慎操作。
nls_timestamp_format
参数说明:设置时间戳默认格式。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:字符串
默认值:DD-Mon-YYYY HH:MI:SS.FF AM
max_function_args
参数说明:函数参数最大个数。
该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。
取值范围:整型
默认值:8192
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
sql_compatibility
参数说明: 控制数据库的SQL语法和语句行为同哪一个主流数据库兼容。
该参数属于INTERNAL类型参数,用户无法修改,只能查看。
取值范围: 枚举型
- A表示同Oracle数据库兼容。
- B表示同MySQL数据库兼容。
- C表示同TeraData数据库兼容。
- PG表示同PostgreSQL数据库兼容。
- MSSQL表示同SQL Server数据库兼容。(MSSQL兼容类型仅在V2.2 Build 10 Patch No.9及以后版本中支持。)
默认值: A
该参数需要在执行CREATE DATABASE命令创建数据库时通过dbcompatibility设置。
在数据库中,该参数只能是确定的一个值,要么始终设置为A,要么始终设置为B,请勿任意改动,否则会导致数据库行为不一致。
enable_ora_group
参数说明: 用于设置group by后接的常量和NULL的处理方式,当开启时忽略常量和NULL,即处理方式与Oracle保持一致。其中常量包括数字、中文、英文。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
off,对group by后接常量和NULL进行相应处理,将常量当做查询列的序号,序号不合法时将报错。
on,忽略group by后接的常量和NULL。
默认值: off
此参数仅Orace兼容模式下起效,且仅在Vastbase G100 V2.2 Build 10 的Patch No.17及后续补丁版本中支持。
behavior_compat_options
参数说明: 数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 字符串
默认值: reduce_tailing_zero
当前只支持“表1兼容性配置项”中的内容。
配置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set behavior_compat_options='end_month_calculate,display_leading_zero';
表 1 兼容性配置项
浮点数显示配置项。控制数值类型中浮点类型、任意精度类型的小数点前零显示。并且length计算数字长度同步显示。
- 不设置此配置项时,对于-1~0和0~1之间的小数,不显示小数点前的0。比如:
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。比如:
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)假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。
- 不设置此配置项时,如果param1的日期(Day字段)为月末,并且param1的日期(Day字段)比result月份的月末日期小,计算结果中的日期字段(Day字段)和param1的日期字段保持一致。比如:
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的月末日期保持一致。比如:
select add_months('2018-02-28',3) from sys_dummy;
返回结果为:
add_months --------------------- 2018-05-31 00:00:00 (1 row)analyze采样行为配置项。
设置此配置项时,会优化analyze的采样行为,主要体现在analyze时全局采样会更精确的控制在3万条左右,更好的控制analyze时DBnode端的内存消耗,保证analyze性能的稳定性。
如果存在与模式名schema_name相同的表空间名,那么如果设置search_path为schema_name, default_tablespace也会同步切换到schema_name。
在存储过程中如果不显示指定模式名,会优先在存储过程所属的模式下搜索。
- 若不设置此参数,报错退出。
- 若设置此参数,按照search_path中指定的顺序继续搜索。如果还是找不到,报错退出。
若设置此配置项,则不需要对除法结果做范围校验,例如,INT_MIN/(-1)可以得到输出结果为INT_MAX+1,反之,则会因为超过结果大于INT_MAX而报越界错误。
控制函数lpad()和rpad()结果为空字符串
''
的显示配置项。
- 不设置此配置项时,空字符串显示为NULL。
select length(lpad('123',0,'*')) from sys_dummy;
返回结果为:
length -------- (1 row)
- 设置此配置项时,空字符串显示为
''
。select length(lpad('123',0,'*')) from sys_dummy;
返回结果为:
length -------- 0 (1 row)控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。
若设置此配置项,当concat函数参数为variadic类型时,保留Oracle和Teradata兼容模式下不同的结果形式;否则默认Oracle和Teradata兼容模式下结果相同,且与Oracle保持一致。由于MySQL无variadic类型,所以该选项对MySQL兼容模式无影响。
控制在使用MERGE INTO … WHEN MATCHED THEN UPDATE(参考MERGE INTO)和INSERT … ON DUPLICATE KEY UPDATE(参考INSERT)时,当目标表中一条目标数据与多条源数据冲突时UPDATE行为。
若设置此配置项,当存在上述场景时,该冲突行将会多次执行UPDATE;否则(默认)报错,即MERGE或INSERT操作失败。
numeric显示配置项。不设置此项时,numeric按照指定精度显示。设置此项时,隐藏小数点后的末尾0。
set behavior_compat_options='hide_tailing_zero'; select cast(123.123 as numeric(15,10));返回结果为:
numeric --------- 123.123 (1 row)控制rowtype类型判空逻辑,设置此项时,对于rowtype is not null判断,当一行数据有一列不为空的时候返回ture。
设置此项,且sql_compatibility参数的值为A或B时,正则表达式的 flags 参数支持的选项含义有变更:
- 默认不能匹配 'n' 字符。
- flags 中包含n选项时, 能够匹配 'n' 字符。
- regexp_replace(source, pattern replacement) 函数替换所有匹配的子串。
- regexp_replace(source, pattern, replacement, flags) 在 flags值为
''
或者null时,返回值为null。
- 默认能匹配 'n' 字符。
- flags 中的 n 选项表示按照多行模式匹配。
- regexp_replace(source, pattern replacement) 函数仅替换第一个匹配到的子串。
- regexp_replace(source, pattern, replacement, flags) 在 flags值为
''
或者null时,返回值为替换后的字符串。控制隐式游标状态兼容行为。设置此项,且兼容O,隐式游标状态(SQL%FOUND、SQL%NOTFOUND、SQL%ISOPNE、SQL%ROWCOUNT)由原先的仅在当前执行的函数有效,拓展到包括本函数调用的子函数有效。
控制存储过程中FOR_LOOP查询语句行为设置此项时,在FOR rec IN query LOOP语句中,若rec已经定义,不会复用已经定义的rec变量,而且重新建立一个新的变量。否则,会复用已经定义的rec变量,不会建立新的变量。
控制存储过程中select语句和open cursor语句的编译检查设置此项时,在存储过程中执行select语句、open cursor for语句、cursor%rowtype语句、for rec in语句时,若查询的表不存在,则无法创建创建存储过程,不支持trigger函数的编译检查,若查询的表存在,则成功创建存储过程。
控制char(n)类型向其它变长字符串类型转换时的行为,以及char(n)和varchar操作时的行为。默认情况下char(n)类型转换其它变长字符串类型时会省略尾部的空格,开启该参数后,转换时不再省略尾部的空格,并且在转换时如果char(n)类型的长度超过其它变长字符串类型时将会报错;开启该参数后,char(n)和varchar操作时,例如比较操作符,首先各自转换为text类型再进行操作,具体表现为在操作时不会忽略尾部空格,如' '::char(5)和' '::varchar(5)不相等。该参数仅在sql_compatibility参数的值为A时生效。
控制substr(str, from, for)在不同场景下的表现。默认情况下,当from小于0时,substr将从字符串尾部开始计数;当for小于1时,substr将返回NULL。开启该参数后,当from小于0时,将从字符串的第一位的前(-from + 1)位开始计数;当for小于0时,substr将报错。该参数仅在sql_compatibility参数的值为PG时生效。
开启此参数后,创建函数,存储过程,包支持未定义的对象。可以新建成功。可以在GS_DEPENDENCIES和GS_DEPENDENCIES_OBJ查询对应的依赖关系。
开启此参数后,创建PL/pgSQL对象时,会主动维护依赖于该PL/pgSQL对象的OID,不再需要用户手动更新。
注意: 在并发创建PL/pgSQL对象时,如果需要维护的对象间存在竞争关系,可能会造成死锁。
td_compatible_truncation
参数说明: 控制是否开启与Teradata数据库相应兼容的特征。该参数在用户连接上与TD兼容的数据库时,可以将参数设置成为on(即超长字符串自动截断功能启用),该功能启用后,在后续的insert语句中,对目标表中char和varchar类型的列插入超长字符串时,会按照目标表中相应列定义的最大长度对超长字符串进行自动截断。保证数据都能插入目标表中,而不是报错。
超长字符串自动截断功能不适用于insert语句包含外表的场景。如果向字符集为字节类型编码(SQL_ASCII、LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on表示启动超长字符串自动截断功能。
- off表示停止超长字符串自动截断功能。
默认值: off
uppercase_attribute_name
参数说明:设置列名以大写形式返回给客户端。该参数仅在Oracle兼容模式和集中式环境下使用。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:布尔型
- on表示开启列名以大写形式返回给客户端。
- off表示关闭列名以大写形式返回给客户端。
默认值:off
lastval_supported
参数说明: 在分布式模式中,该参数控制是否可以使用lastval函数;而在单机模式下,该参数控制nextval函数在并行查询中是否可以下推到并行算子。
事实上,无论是分布式中lastval的使用,还是单机模式下nextval是否下推到并行算子,都不是由该参数单独控制的。enable_beta_features在这两个行为的控制上也发挥着作用,因此在讨论该参数的作用时,前提都是enable_beta_features为off。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
- on:在分布式模式中,表示允许lastval函数的使用;在单机模式中,表示nextval函数不可以下推到并行算子。
- off:在分布式模式中,表示不允许lastval函数的使用;在单机模式中,表示nextval函数可以下推到并行算子。
默认值: off
last_insert_id_supported
参数说明: 控制是否可以使用LAST_INSERT_ID函数。
该参数属于POSTMASTER类型参数,请参考重设参数表1中对应设置方法进行设置。
该参数仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
仅在Vastbase G100 V2.2 Build 10 的Patch No.5及后续补丁版本中支持此参数。
取值范围: 布尔型
- on:表示支持LAST_INSERT_ID函数。
- off:表示不支持LAST_INSERT_ID函数。
默认值: off
oracle_vpd_enabled
参数说明: 该参数用于控制oracle_vpd功能。
该参数仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该参数。
该参数支持的版本情况如下:
- Vastbase G100 V2.2 Build 5(Patch No.174)及后续补丁版本
- Vastbase G100 V2.2 Build 10(Patch No.8)及后续补丁版本
- Vastbase G100 V2.2 Build 13及以后版本
该参数属于SIGHUP类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围: 布尔型
on:表示打开oracle_vpd功能。
off:表示关闭oracle_vpd功能。
默认值: off