平台和客户端兼容性
很多平台都使用数据库系统,数据库系统的对外兼容性给平台提供了很大的便利。
a_format_date_timestamp
参数说明:控制返回的日期时间。在A模式下,当事务开启时,函数current_date()、current_timestamp()、localtimestamp()返回当前SQL启动的时间戳。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:返回当前SQL启动的时间戳。
- off:返回事务开启的日期或日期及时间。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。在开启事务需要返回系统时间时可开启该参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
convert_string_to_digit
参数说明:设置隐式转换优先级,是否优先将字符串转为数字。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示优先将字符串转为数字。
- off:表示不优先将字符串转为数字。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:调整该参数会修改内部数据类型转换规则,导致不可预期的行为,请谨慎操作。
character_set_connection
参数说明:用于设置常量字符串的字符集。修改该参数会同步将collation_connection修改成该字符集的默认字符序。
- 在sql_compatibility='B'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
- 在M-Compatibility模式下生效。
参数类型:字符串
参数单位:无
取值范围:
- sql_compatibility='B'兼容性模式下支持的字符集,请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节中的“COLLATE collation”。
- 在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:与当前server_encoding保持一致。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置库级和会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置的字符集和当前环境不符时,可能导致多次转码,影响性能。
collation_connection
参数说明:用于设置常量字符串的字符序。修改该参数会同步将character_set_connection修改成该字符序的默认字符集。
- 在sql_compatibility='B'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
- 在M-Compatibility模式下生效。
参数类型:字符串
参数单位:无
取值范围:
- sql_compatibility='B'兼容性模式下支持的字符集,请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节中的“COLLATE collation”。
- 在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:当前server_encoding的默认字符序,若没有server_encoding的默认字符序,则为“default”。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置库级和会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置的字符序和当前环境不符时,可能导致多次转码,影响性能。
character_set_client
参数说明:该参数用于指定客户端字符集。同client_encoding含义一致。
参数类型:字符串
参数单位:无
取值范围:在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:与客户端字符集一致。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置的字符集和当前环境不符时,可能会出现乱码。
character_set_database
参数说明:该参数用于指定DATABASE、Schema的字符集。
参数类型:字符串
参数单位:无
取值范围:在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:同当前database的字符集一致。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
在M-Compatibility模式下生效。
collation_database
参数说明:该参数用于显示DATABASE、Schema的字符序。
参数类型:字符串
参数单位:无
取值范围:在M-Compatibility模式下取值范围为其支持的字符序,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:当前database的字符集的默认字符序,若默认字符序不存在,则为“default”。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
在M-Compatibility模式下生效。
character_set_server
参数说明:该参数用于指定创建DATABASE、Schema时的字符集。
参数类型:字符串
参数单位:无
取值范围:在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:同当前database的字符集一致。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置库级和会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
在M-Compatibility模式下生效。
collation_server
参数说明:该参数用于指定创建DATABASE、Schema时的字符序。
参数类型:字符串
参数单位:无
取值范围:在M-Compatibility模式下取值范围为其支持的字符序,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
默认值:当前database的字符集的默认字符序,若默认字符序不存在,则为“default”。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置库级和会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
在M-Compatibility模式下生效。
character_set_results
参数说明:用于设置返回结果的字符集。
- 在sql_compatibility = 'B'兼容模式下,设置b_format_version='5.7'、b_format_dev_version='s2'时生效。
- 在M-Compatibility模式下生效。
参数类型:字符串
参数单位:无
取值范围:
- sql_compatibility='B'兼容性模式下支持的字符集,请参见《开发指南》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节中的“COLLATE collation”。
- 在M-Compatibility模式下取值范围为其支持的字符集,请参见《M-Compatibility开发指南》中“SQL参考 > 字符集与字符序”。
- 还可以设置成null或'',此时直接以数据库的字符集输出。
默认值:与当前server_encoding保持一致。
设置方式:该参数属于USERSET类型参数,但不支持通过GUC工具设置,仅支持方式三设置会话级别,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置的字符集和当前环境不符时,可能会出现乱码。
enable_multiple_charset
参数说明:该参数用于控制在M-Compatibility模式数据库下,是否可以创建表、列、Schema指定字符集和当前数据库字符集不同。
参数类型:布尔型
参数单位:无
取值范围:
- on:可以创建表、列、Schema指定字符集和当前数据库字符集不同。
- off:不可以创建表、列、Schema指定字符集和当前数据库字符集不同。
默认值:on。
设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:根据实际业务需求设置。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
nls_timestamp_format
参数说明:设置时间戳默认格式。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:字符串
默认值:"DD-Mon-YYYY HH:MI:SS.FF AM"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
nls_timestamp_tz_format
参数说明:设置带时区时间戳默认格式。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:字符串
默认值:"DD-Mon-YYYY HH:MI:SS.FF AM"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
此参数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。
nls_nchar_characterset
参数说明:搭配nchr(cvalue int|bigint)系统函数使用,设置国家字符集。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:“AL16UTF16”、“UTF8”,不区分大小写。
默认值:"AL16UTF16"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 数据库不支持国家字符集,该参数只是为了兼容A数据库,获取用户想使用的国家字符集。
- 该GUC参数仅限于nchr(cvalue int|bigint)函数的使用。
group_concat_max_len
参数说明:搭配函数group_concat()使用,限制其返回值长度,超长截断,并产生相应报错/告警。当sql_mode设置含有STRICT_TRANS_TABLES时,DML语句中会产生报错,其余场景中提示告警。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 9223372036854775807,目前实际生效的最大长度是1073741823,超出此长度后会有out of memory的报错。
默认值:1024。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:设置过小可能导致group_concat()返回的结果被截断。
lastval_supported
参数说明:控制是否可以使用lastval()函数。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示支持lastval()函数,同时nextval()函数不支持下推。
- off:表示不支持lastval()函数,同时nextval()函数可以下推。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
max_function_args
参数说明:函数参数最大个数。
参数类型:整型
参数单位:个
取值范围:8192
默认值:8192
设置方式:该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
max_subpro_nested_layers
参数说明:嵌套子程序的最大嵌套深度。该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 100
当设置为0时,不允许使用嵌套子程序。
默认值:3。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据最大嵌套情况设置。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
transform_null_equals
参数说明:是否控制表达式expr=NULL(或NULL=expr)当作expr IS NULL处理。正确的SQL标准兼容的expr=NULL总是返回NULL(未知)。Microsoft Access里的过滤表单生成的查询使用expr=NULL来测试空值。打开这个选项后,可以使用该接口来访问数据库。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示控制表达式expr=NULL(或NULL=expr)当作expr IS NULL处理,如果expr得出NULL值则返回真,否则返回假。
- off:表示不控制,即expr=NULL总是返回NULL(未知)。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
新用户经常在涉及NULL的表达式上语义混淆,故默认值设为off。
support_extended_features
参数说明:控制是否支持数据库的扩展特性。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示支持数据库的扩展特性。
- off:表示不支持数据库的扩展特性。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
sql_compatibility
参数说明:控制数据库的SQL语法和语句行为同哪一个主流数据库兼容。
参数类型:枚举类型
参数单位:无
取值范围:
- A:表示同O数据库兼容。
- B:表示同MY数据库兼容。
- C:表示同TD数据库兼容。
- PG:表示同POSTGRES数据库兼容。
- M:表示M-Compatibility。
默认值:A
设置方式:该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
- 该参数只能在执行CREATE DATABASE命令(详见《开发指南》的“SQL参考 > SQL语法 > CREATE DATABASE”章节)创建数据库的时候设置。
- 在数据库中,该参数只能是确定的一个值,要么始终设置为A,要么始终设置为B,请勿任意改动,否则会导致数据库行为不一致。
b_format_behavior_compat_options
参数说明:数据库B模式兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表1 B模式兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开,例如:set b_format_behavior_compat_options="enable_set_variables,set_session_transaction";。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
当参数b_format_version不为""时,b_format_behavior_compat_options会被设置为"all",而且不能被修改。
兼容性配置项 |
兼容性行为控制 |
---|---|
enable_set_variables |
set语法增强控制开关。
|
set_session_transaction |
set session transaction控制开关。
|
enable_modify_column |
ALTER TABLE MODIFY语义控制开关。
|
default_collation |
默认字符序前向兼容开关。
|
all |
打开所有语法控制开关。 all不能同时和其他配置项一起指定。表格中除all外所有配置项逗号隔开的含义和取值为all含义相同。 |
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:控制一些B兼容性特性是否可用,若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
m_format_behavior_compat_options
参数说明:数据库M-compatibility模式的兼容性行为配置项。多租场景下,该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表2,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
兼容性配置项 |
兼容性行为控制 |
---|---|
enable_escape_string |
转义符控制开关。
|
enable_conflict_funcs |
冲突函数控制开关。
|
select_column_name |
列名回显控制开关。目前只有M兼容模式下支持,在B模式下是不支持的。需要设置m_format_behavior_compat_options ='select_column_name',特性开关为用户级,缺省关闭。
|
enable_precision_decimal |
支持数据类型精度。
|
enable_load_data_remote_transmission |
LOAD DATA支持从客户端导入数据。 不设置此项时:LOAD DATA指定local参数后将从服务端所在环境导入文件; 设置此配置项时:LOAD DATA指定local参数后将从客户端所在环境导入数据。 |
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
在未开启精度传递参数(m_format_behavior_compat_options不开启enable_precision_decimal选项)情况下创建的索引在开启精度传递参数后会发生失效,如果打开精度传递时需要重新创建索引。
behavior_compat_options
参数说明:数据库兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表3,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开,例如:set behavior_compat_options='end_month_calculate,display_leading_zero';。
默认值:"forbid_package_function_with_prefix,enable_bpcharlikebpchar_compare,enable_crosstype_integer_operator,forbid_skip_tableof_empty_str_elem"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
兼容性配置项 |
兼容性行为控制 |
||||
---|---|---|---|---|---|
display_leading_zero |
浮点数显示配置项。控制数值类型中char、character、nchar、varchar、character varying、varchar2、nvarchar2、text、clob等所有字符串类型和float4、float8、numeric等任意精度类型的小数点前0的显示,length计算数字长度时是否包含小数点前的0。
|
||||
end_month_calculate |
add_months函数计算逻辑配置项。 此参数在M-Compatibility模式数据库下不生效。 假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。
|
||||
compat_analyze_sample |
analyze采样行为配置项。 设置此配置项时,会优化analyze的采样行为,主要体现在analyze时全局采样会更精确的控制在三万条左右,更好地控制analyze时DBnode端的内存消耗,保证analyze性能的稳定性。 |
||||
bind_schema_tablespace |
绑定模式与同名表空间配置项。 如果存在与模式名sche_name相同的表空间名,那么如果设置search_path为sche_name, default_tablespace也会同步切换到sche_name。 |
||||
bind_procedure_searchpath |
未指定模式名的存储过程中的数据库对象的搜索路径配置项。 在存储过程中如果不显示指定模式名,会优先在存储过程所属的模式下搜索。 如果找不到,则有两种情况:
|
||||
correct_to_number |
控制to_number()结果兼容性的配置项。
|
||||
unbind_divide_bound |
控制对整数除法的结果进行范围校验。 此参数在M-Compatibility模式数据库下不生效。
|
||||
convert_string_digit_to_numeric |
控制当表中以字符串形式表示的numeric常量和数字类型做比较时,是否都统一转换为numeric类型再进行比较。 此参数在M-Compatibility模式数据库下不生效。
|
||||
return_null_string |
控制函数lpad()和rpad()结果为空字符串''的显示配置项。 此参数在M-Compatibility模式数据库下不生效。
|
||||
compat_concat_variadic |
控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。由于B数据库无variadic类型,所以该选项对B数据库无影响。
|
||||
merge_update_multi |
控制在使用MERGE INTO ... WHEN MATCHED THEN UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > MERGE INTO”章节)和INSERT ... ON DUPLICATE KEY UPDATE(参考《开发指南》的“SQL参考 > SQL语法 > INSERT”章节)时,当目标表中一条目标数据与多条源数据冲突时UPDATE行为。
|
||||
plstmt_implicit_savepoint |
控制存储过程中更新语句的执行是否拥有独立的子事务。 若设置此配置项,存储过程中每条更新语句前开启隐式保存点,EXCEPTION块中默认回退到最近的保存点,从而保证只回退失败语句的修改。该选项是为了兼容ORA数据库的EXCEPTION行为。 |
||||
hide_tailing_zero |
numeric显示配置项。
例如: 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) |
||||
truncate_numeric_tail_zero |
numeric显示配置项。
例如: 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) |
||||
char_coerce_compat |
控制char(n)类型向其它变长字符串类型转换时的行为。该参数仅在sql_compatibility参数的值为A时生效,并且开启该参数后无论是隐式转换、显式转换还是通过调用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) gaussdb=# drop table tab_1; gaussdb=# drop table tab_2; |
||||
rownum_type_compat |
控制ROWNUM的类型,ROWNUM默认类型为BIGINT,设置此参数后,ROWNUM类型变更为NUMERIC类型。 gaussdb=# set behavior_compat_options=''; gaussdb=# create table tb_test(c1 int,c2 varchar2,c3 varchar2); gaussdb=# insert into tb_test values(1,'a','b'); gaussdb=# create or replace view v_test as select rownum from tb_test; gaussdb=# \d+ v_test View "public.v_test" Column | Type | Modifiers | Storage | Description --------+--------+-----------+---------+------------- rownum | bigint | | plain | View definition: SELECT ROWNUM AS "rownum" FROM tb_test; gaussdb=# set behavior_compat_options = 'rownum_type_compat'; gaussdb=# create or replace view v_test1 as select rownum from tb_test; gaussdb=# \d+ v_test1 View "public.v_test1" Column | Type | Modifiers | Storage | Description --------+---------+-----------+---------+------------- rownum | numeric | | main | View definition: SELECT ROWNUM AS "rownum" FROM tb_test; gaussdb=# drop view v_test; gaussdb=# drop view v_test1; gaussdb=# drop table tb_test; |
||||
aformat_null_test |
控制rowtype类型判空逻辑。 此参数在M-Compatibility模式数据库下不生效。 设置此项时,对于rowtype is not null的判断逻辑为当一行数据有一列不为空的时候返回true;不设置此项时,对于rowtype is not null的判断逻辑为当一行数据所有列不为空的时候返回true。该参数不影响rowtype is null的判断。 gaussdb=# set behavior_compat_options='aformat_null_test'; gaussdb=# select r, r is null as isnull, r is not null as isnotnull from (values (1,row(1,2)), (1,row(null,null)), (1,null), (null,row(1,2)), (null,row(null,null)), (null,null) ) r(a,b); r | isnull | isnotnull -------------+--------+----------- (1,"(1,2)") | f | t (1,"(,)") | f | t (1,) | f | t (,"(1,2)") | f | t (,"(,)") | f | t (,) | t | f (6 rows) gaussdb=# set behavior_compat_options=''; gaussdb=# select r, r is null as isnull, r is not null as isnotnull from (values (1,row(1,2)), (1,row(null,null)), (1,null), (null,row(1,2)), (null,row(null,null)), (null,null) ) r(a,b); r | isnull | isnotnull -------------+--------+----------- (1,"(1,2)") | f | t (1,"(,)") | f | t (1,) | f | f (,"(1,2)") | f | f (,"(,)") | f | f (,) | t | f (6 rows) |
||||
aformat_regexp_match |
控制正则表达式函数的匹配行为。
设置此项,且sql_compatibility参数的值为A或B或在M-Compatibility兼容数据库时,正则表达式的flags参数支持的选项含义:
否则,正则表达式的flags参数支持的选项含义:
|
||||
disable_rewrite_nesttable |
开启此参数后,针对pg_type表中tableof类型相关字段的重写会被禁用。即读取pg_type表时,会显示tableof类型实际存储的值。 |
||||
disable_emptystr2null |
A兼容模式绑参场景中,开启此参数后,关闭默认将字符类型传参的值从空串转换为null功能。包括text、clob、blob、raw、bytea、varchar、nvarchar2、bpchar、char、name、byteawithoutorderwithqualcol、byteawithoutordercol类型。该参数为逃生参数,非必要用户不要自行设置。 |
||||
compat_cursor |
控制隐式游标状态兼容行为。设置此项,且兼容A,隐式游标状态(SQL%FOUND、SQL%NOTFOUND、SQL%ISOPNE、SQL%ROWCOUNT)由原先的仅在当前执行的函数有效,拓展到包括本函数调用的子函数有效。 |
||||
allow_procedure_compile_check |
控制存储过程中select语句和open cursor语句的编译检查。设置此项时,在存储过程中执行select语句、open cursor for语句、cursor%rowtype语句、for rec in语句时,若查询的表不存在,则无法创建存储过程,不支持trigger函数的编译检查,若查询的表存在,则成功创建存储过程。 注意:创建密态函数时,需要将allow_procedure_compile_check关闭。 |
||||
skip_insert_gs_source |
开启此参数后,创建PL/SQL对象时不再插入dbe_pldeveloper.gs_source表中。 |
||||
select_into_return_null |
开启此参数后,存储过程语句SELECT select_expressions INTO [STRICT] target FROM ... 允许在不指定STRICT并且查询结果为空时给变量赋NULL值。 |
||||
plsql_security_definer |
开启此参数后,创建存储过程时默认为定义者权限。 |
||||
proc_outparam_override |
控制存储过程出参的重载行为,打开该参数后,对于存储过程只有out出参部分不同的情况,也可以正常创建和调用。目前只有gsql与jdbc连接数据库时可以使用该参数,对于其他工具打开该参数连接数据库时无法正常调用带有out的存储过程。 支持带有out出参的函数返回record类型,且out出参正常赋值。 |
||||
proc_implicit_for_loop_variable |
控制存储过程中FOR_LOOP查询语句行为设置此项时,在FOR rec IN query LOOP语句中,若rec已经定义,不会复用已经定义的rec变量,而是重新建立一个新的变量。否则,会复用已经定义的rec变量,不会建立新的变量。 |
||||
proc_uncheck_default_param |
函数调用时不检查默认参数省略情况配置项。
|
||||
dynamic_sql_compat |
开启此参数后:
说明:
动态语句执行匿名块语句时调用存储过程的场景,只针对IN参数进行矫正,如果需要对OUT参数进行检查需要设置proc_outparam_override选项。 |
||||
dynamic_sql_check |
开启此参数后,动态语句模板SQL中的不同模板参数个数与using子句中的变量个数不同时,将会在动态语句执行期间报错。
说明:
|
||||
enable_funcname_with_argsname |
开启参数后,使用select调用函数时投影别名显示完整函数。
|
||||
proc_outparam_transfer_length |
开启此参数后,存储过程和函数支持out出参长度传递,会在内层存储过程或者函数中报错。例如:
gaussdb=# SET behavior_compat_options='proc_outparam_override,proc_outparam_transfer_length'; SET gaussdb=# CREATE OR REPLACE PROCEDURE out_param_test1(m in int, v inout varchar2,v1 inout varchar2) is gaussdb$# begin gaussdb$# v := 'aaaddd'; gaussdb$# v1 := 'aaaddd'; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CREATE OR REPLACE PROCEDURE call_out_param_test1 is gaussdb$# v varchar2(5) := 'aabbb'; gaussdb$# v1 varchar2(6) := 'aabb'; gaussdb$# begin gaussdb$# out_param_test1(5,v,v1); gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CALL call_out_param_test1(); ERROR: value too long for type character varying(5) CONTEXT: PL/SQL function out_param_test1(integer,character varying,character varying) line 3 at assignment PL/SQL function call_out_param_test1() line 4 at SQL statement gaussdb=# DROP PROCEDURE call_out_param_test1; gaussdb=# DROP PROCEDURE out_param_test1; |
||||
varray_compat |
开启此参数后:
行为差异详情和示例具体可参考《开发指南》中“存储过程 > 数组,集合和record > 数组”章节。
说明:
|
||||
tableof_elem_constraints |
开启此参数后:
行为差异详情和示例具体可参考《开发指南》中“存储过程 > 数组,集合和record > 集合”章节。
说明:
元素合法性校验示例: 未开启此参数时调用如下存储过程,元素不校验。 gaussdb=# CREATE OR REPLACE procedure p1 is gaussdb$# type t1 is table of varchar(5); gaussdb$# v t1 := t1(); gaussdb$# begin gaussdb$# v.extend(); gaussdb$# v(1) := '123456'; gaussdb$# raise info '%', v; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CALL p1(); INFO: {123456} p1 ---- (1 row) gaussdb=# DROP procedure p1; 开启此参数后调用如下存储过程,元素校验会报错。 gaussdb=# SET behavior_compat_options = 'tableof_elem_constraints'; SET gaussdb=# CREATE OR REPLACE procedure p1 is gaussdb$# type t1 is table of varchar(5); gaussdb$# v t1 := t1(); gaussdb$# begin gaussdb$# v.extend(); gaussdb$# v(1) := '123456'; gaussdb$# raise info '%', v; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CALL p1(); ERROR: value too long for type character varying(5) CONTEXT: PL/SQL function p1() line 5 at assignment 索引值合法性校验示例: 未开启该参数时,索引值超过定义长度不报错。 gaussdb=# CREATE OR REPLACE procedure p1 is gaussdb$# type t1 is table of int index by varchar(5); gaussdb$# v t1; gaussdb$# begin gaussdb$# v('123456') := 1; gaussdb$# raise info '%', v; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CALL p1(); INFO: {indexbyType:varchar,"123456"=>1} p1 ---- (1 row) gaussdb=# DROP procedure p1; 开启该参数后,索引值超过定义长度报错。 gaussdb=# SET behavior_compat_options = 'tableof_elem_constraints'; SET gaussdb=# CREATE OR REPLACE procedure p1 is gaussdb$# type t1 is table of int index by varchar(5); gaussdb$# v t1; gaussdb$# begin gaussdb$# v('123456') := 1; gaussdb$# raise info '%', v; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# CALL p1(); ERROR: value too long for type character varying(5) CONTEXT: PL/SQL function p1() line 4 at assignment |
||||
allow_rownum_alias |
开启此参数后,将允许ROWNUM在SQL语句中通过AS语法用作列的别名,ROWNUM将作为普通标识符使用,不再能够作为伪列使用。 此参数在M-Compatibility模式数据库下不生效。
说明:
不建议在执行业务期间变更该参数的状态。开启参数的状态下,在数据库中用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) |
||||
allow_function_procedure_replace |
默认场景下,对于A和PG兼容模式,当有一个包外的存储过程(或函数)时,创建一个同名的函数(或存储过程),与已有对象类型不同,不支持创建并报错。开启此参数后,通过create or replace的方式可以实现包外同名的存储过程和函数对象之间的类型替换。 gaussdb=# create or replace function proc_test return varchar2 as gaussdb$# begin gaussdb$# return '1'; gaussdb$# end; gaussdb$# / CREATE FUNCTION gaussdb=# create or replace procedure proc_test as gaussdb$# begin gaussdb$# null; gaussdb$# end; gaussdb$# / ERROR: cannot change routine kind DETAIL: "proc_test" is a function. gaussdb=# \df+ proc_test List of functions Schema | Name | Result data type | Argument data types | Type | Volatility | Owner | Language | Source code | Description | fencedmode | propackage | prokind --------+-----------+-------------------+---------------------+--------+------------+-----------+----------+-------------+-------------+------------+------------+--------- public | proc_test | character varying | | normal | volatile | wangxinyu | plpgsql | DECLARE +| | f | f | f | | | | | | | | begin +| | | | | | | | | | | | return '1';+| | | | | | | | | | | | end | | | | (1 row) -- 设置参数后允许替换类型 gaussdb=# set behavior_compat_options='allow_function_procedure_replace'; SET gaussdb=# create or replace procedure proc_test as gaussdb$# begin gaussdb$# null; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# \df+ proc_test List of functions Schema | Name | Result data type | Argument data types | Type | Volatility | Owner | Language | Source code | Description | fencedmode | propackage | prokind --------+-----------+------------------+---------------------+--------+------------+-----------+----------+-------------+-------------+------------+------------+--------- public | proc_test | void | | normal | volatile | wangxinyu | plpgsql | DECLARE +| | f | f | p | | | | | | | | begin +| | | | | | | | | | | | null; +| | | | | | | | | | | | end | | | | (1 row) gaussdb=# drop procedure proc_test; |
||||
collection_exception_backcompa |
控制在PL/SQL中集合类型相关报错抛出的异常值,当前控制三种异常值,对应关系如下: 未开启该参数 开启该参数 collection_is_null program_limit_exceeded subscript_beyond_count program_limit_exceeded subscript_outside_limit program_limit_exceeded 用例: gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1; gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v.count(); gaussdb$# exception when collection_is_null then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Reference to uninitialized collection p1 ---- (1 row) gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1 := t1(1, 2, 3); gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v(4); gaussdb$# exception when subscript_beyond_count then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Subscript beyond count p1 ---- (1 row) gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1 := t1(1, 2, 3); gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v(-1); gaussdb$# exception when subscript_outside_limit then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Subscript outside of limit p1 ---- (1 row) gaussdb=# set behavior_compat_options = 'collection_exception_backcompat'; SET gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1; gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v.count(); gaussdb$# exception when program_limit_exceeded then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Reference to uninitialized collection p1 ---- (1 row) gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1 := t1(1, 2, 3); gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v(4); gaussdb$# exception when program_limit_exceeded then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Subscript beyond count p1 ---- (1 row) gaussdb=# create or replace procedure p1 is gaussdb$# type t1 is table of int; gaussdb$# v t1 := t1(1, 2, 3); gaussdb$# v_int int; gaussdb$# begin gaussdb$# v_int := v(-1); gaussdb$# exception when program_limit_exceeded then gaussdb$# raise info '%', sqlerrm; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# call p1(); INFO: Subscript outside of limit p1 ---- (1 row) gaussdb=# drop procedure p1; |
||||
enable_case_when_alias |
开启该参数后,case when和decode语法的别名为以__unnamed_开头的字符串。 用例: gaussdb=# set behavior_compat_options='enable_case_when_alias'; SET gaussdb=# create table test(c1 varchar2); CREATE TABLE gaussdb=# insert into test values('x'); INSERT 0 1 gaussdb=# select decode(c1,'x','0','default') from test; __unnamed_decode__ -------------------- 0 (1 row) gaussdb=# select (case c1 when 'x' then '0' else 'default' end) from test; __unnamed_case_when__ ----------------------- 0 (1 row) gaussdb=# drop table test; |
||||
plsql_rollback_keep_user |
控制在PL/SQL中rollback和rollback to savepoint是否修改当前用户。当开启此参数时,PL/SQL中rollback将不会修改当前用户。 用例: gaussdb=# create user plsql_rollback1 PASSWORD '********'; gaussdb=# create user plsql_rollback2 PASSWORD '********'; gaussdb=# grant plsql_rollback1 to plsql_rollback2; gaussdb=# create or replace procedure plsql_rollback1.p1 () authid definer gaussdb-# as gaussdb$# va int; gaussdb$# begin gaussdb$# raise info 'current usr:%', current_user; gaussdb$# rollback; gaussdb$# raise info 'current usr:%', current_user; gaussdb$# end; gaussdb$# / CREATE PROCEDURE gaussdb=# set session AUTHORIZATION plsql_rollback2 PASSWORD '********'; SET gaussdb=> set behavior_compat_options = 'plsql_rollback_keep_user'; SET gaussdb=> call plsql_rollback1.p1 (); INFO: current usr:plsql_rollback1 INFO: current usr:plsql_rollback1 p1 ---- (1 row)
说明:
|
||||
enable_bpcharlikebpchar_compare |
启用/关闭bpcharlikebpchar和bpcharnlikebpchar操作符。
说明:
|
||||
cursor_asensitive |
用于游标数据敏感行为的前向兼容,集中式暂不支持该选项。 |
||||
show_full_error_lineno |
用于显示包含存储过程头部信息的行号,创建存储过程打印编译报错信息时,显示从CREATE语句开始的行号;调用有编译问题的语句时,对于非失效重编译场景,显示从CREATE语句开始的行号,失效重编译报错按照原有逻辑显示行号,调用编译显示报错信息需要开启gs_source且该表中存在存储过程的原始定义,否则按照原有逻辑显示报错行号;执行存储过程时报错,设置该参数后,显示从CREATE语句开始的行号。该参数仅在集中式下生效。 gaussdb=# set behavior_compat_options='show_full_error_lineno'; gaussdb=# set plsql_compile_check_options='plsql_expression_check'; gaussdb=# CREATE OR REPLACE function proclex1(type1 int) return int is var1 int; var2 int; begin var3 := 30; --- var3未定义 return type1; end; / WARNING: "var3" is not a known variable DETAIL: N/A CONTEXT: compilation of PL/pgSQL function "proclex1" near line 6 WARNING: Function created with compilation errors. |
||||
enable_crosstype_integer_operator |
启用/关闭跨类型整型操作符。
说明:
|
||||
forbid_package_function_with_prefix |
打开该参数后,创建package内的函数时,如果函数有前缀,则会报错。 例如: --打开参数 gaussdb=# SET behavior_compat_options='forbid_package_function_with_prefix'; SET --创建SCHEMA sch1 gaussdb=# CREATE SCHEMA sch1; --创建PACKAGE后报错 gaussdb=# CREATE PACKAGE pck1 IS PROCEDURE sch1.pck1(); END pck1; / ERROR: not support procedure name use *.* format in package at or near ";" CONTEXT: compilation of PL/pgSQL package near line 1 --删除SCHEMA sch1 gaussdb=# DROP SCHEMA sch1; |
||||
time_constexpr_compact |
打开该参数后,执行时间表达式场景,会根据常量是否携带时区,自动返回with timezone类型或without timezone类型。 目前支持timestamp类型、time类型。 --执行不带时区的时间戳表达式。 gaussdb=# SELECT timestamp '1999-03-15 8:00:00'; timestamp --------------------- 1999-03-15 08:00:00 (1 row) --执行带时区的时间戳表达式 返回timestamp with time zone类型。 gaussdb=# SELECT timestamp '1999-03-15 8:00:00 -8:00:00'; timestamptz ------------------------ 1999-03-16 00:00:00+08 (1 row) |
||||
enable_use_ora_timestamptz |
开启后TIMESTAMP AT TIME ZONE语法得到的日期时间跟A数据库保持一致。由于GaussDB只能显示session时区,A可以显示输入的时区,当时区不一致时显示的结果不同,将日期时间转换到相同时区后是同一时间点。 --打开参数前 gaussdb=# SELECT timestamp '2024-03-20 01:30:00’ at time zone 'Europe/Moscow' FROM dual; timezone ---------------------- 2024-03-20 06:30:00+08 (1 row) -- 打开参数后 gaussdb=# SET behavior_compat_options='enable_use_ora_timestamptz'; SET gaussdb=# SELECT timestamp '2024-03-20 01:30:00’ at time zone 'Europe/Moscow' FROM dual; timezone ---------------------- 2024-03-20 01:30:00+08 (1 row)
说明:
该参数仅在数据库兼容性为A时有效。 |
||||
forbid_skip_tableof_empty_str_elem |
用于控制无索引的集合类型对于'{1,,3}'格式字符串的输入行为。
|
||||
sys_function_without_brackets |
开启该参数后,对于A兼容模式下无入参系统函数,可以不带括号进行调用。
|
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据数据库兼容对象进行调整。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
plsql_compile_check_options
参数说明:数据库兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表4,当设置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set plsql_compile_check_options='for_loop,outparam'。
默认值:''。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
兼容性配置项 |
兼容性行为控制 |
---|---|
for_loop |
控制存储过程中FOR_LOOP查询语句行为。设置此项时,在FOR rec IN query LOOP语句中,若rec已经定义,不会复用已经定义的rec变量,而是重新建立一个新的变量。否则,会复用已经定义的rec变量,不会建立新的变量。(与proc_implicit_for_loop_variable相同,后续进行收编) |
outparam |
可能存在多个同名但输出参数列表不同的重载函数,若开启该选项,将对out出参进行检查,out出参为常量时报错。 |
plsql_expression_check |
开启plsql_expression_check参数。 校验函数、存储过程和PACKAGE中的全量语句。当存在未定义的对象时(例如表不存在,变量不存在,函数不存在),会打印告警信息。
说明:
校验功能举例:
gaussdb=# CREATE OR REPLACE procedure proc1() AS var1 int; begin SELECT id into var1 from table1_not_exist limit 1;--表不存在,有告警信息 SELECT id into var1 from view1_not_exist limit 1;--视图不存在,有告警信息 var1 := func_input1(func1_not_exist());--函数不存在,有告警信息 var1 := pkg.var1_not_exist;--package变量不存在,有告警信息 end; /
执行结果如下:新建成功,打印告警信息
WARNING: compile failed when parse the query: select id from table1_not_exist limit 1, error info is relation "table1_not_exist" does not exist on datanode DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 3 WARNING: compile failed when parse the query: select id from view1_not_exist limit 1, error info is relation "view1_not_exist" does not exist on datanode DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 4 WARNING: compile failed when parse the query: SELECT func_input1(func1_not_exist()), error info is function func1_not_exist() does not exist DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 5 WARNING: compile failed when parse the query: SELECT pkg.var1_not_exist, error info is missing FROM-clause entry for table "pkg" DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 6 WARNING: Procedure created with compilation errors. CREATE PROCEDURE 存在误报情况: 示例1: gaussdb=# CREATE TABLE emp(deptno smallint, ename char(100), salary int); gaussdb=# CREATE TABLE emp_back(deptno smallint, ename char(100), salary int); gaussdb=# CREATE OR REPLACE PROCEDURE proc_200() As BEGIN for data in delete from emp returning * loop INSERT INTO emp_back values(data.deptno,data.ename,data.salary);--此处误报 END LOOP; END; / WARNING: compile failed when parse the query: INSERT INTO emp_back values(data.deptno,data.ename,data.salary), error info is record "data" is not assigned yet when get datum type info DETAIL: N/A CONTEXT: compilation of PL/pgSQL function "proc_200" near line 4 WARNING: Procedure created with compilation errors. CREATE PROCEDURE
示例2:
gaussdb=# CREATE OR REPLACE procedure proc1() is BEGIN DROP TABLE if exists table1; CREATE TABLE table1(id int); INSERT INTO table1 values(1);--此处会误判断错误,table1不存在。 END; / WARNING: compile failed when parse the query: insert into table1 values(1), error info is relation "table1" does not exist on datanode DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 2 WARNING: Procedure created with compilation errors. CREATE PROCEDURE --pg_object对应的状态为无效。 gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on obj.object_oid = proc.oid and proc.proname = 'proc1'; object_type | valid -------------+------- P | f (1 row) gaussdb=# ALTER procedure proc1 compile; WARNING: compile failed when parse the query: insert into table1 values(1), error info is relation "table1" does not exist on datanode DETAIL: N/A CONTEXT: compilation of PL/SQL function "proc1" near line 5 WARNING: Procedure proc1 recompile with compilation errors. ALTER PROCEDURE gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on obj.object_oid = proc.oid and proc.proname = 'proc1'; object_type | valid -------------+------- P | f (1 row) gaussdb=# CALL proc1(); NOTICE: table "table1" does not exist, skipping CONTEXT: SQL statement "drop table if exists table1" PL/SQL function proc1() line 3 at SQL statement proc1 ------- (1 row) gaussdb=# SELECT object_type,valid from pg_object obj join pg_proc proc on obj.object_oid = proc.oid and proc.proname = 'proc1'; object_type | valid -------------+------- P | t (1 row) 该参数在新建函数、存储过程、PACKAGE,以及重编译函数、存储过程、PACKAGE时,会执行校验的功能。误报会导致pg_object的valid字段变为false。 执行阶段,不进行校验。执行成功时,pg_object的valid字段变为true。 |
a_format_version
参数说明:数据库平台兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表5。
默认值:"10c"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
a_format_dev_version
参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表6。
默认值:"s6"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
兼容性配置项 |
兼容性行为控制 |
---|---|
s1 |
|
s2 |
|
s3 |
|
s4 |
|
s5 |
|
s6 |
|
b_format_version
参数说明:数据库平台兼容性行为配置项,用于控制B兼容模式下的前向兼容性。该参数可在PDB级别设置。
- 仅当sql_compatibility兼容性参数设置为B时,b_format_version参数才会生效。
- 当该参数设置为非空字符串时,会同时设置参数b_format_behavior_compat_options为“ALL”值,参数bytea_output为“escape”值。当该参数重新设置为空字符串时,会将b_format_behavior_compat_options、bytea_output参数设为原来的值。
参数类型:字符串
参数单位:无
取值范围:空字符串""或"5.7"
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表 GUC参数分类中对应设置方法进行设置。
设置建议:与b_format_dev_version一起设置,在安装部署后立即设置,后期非必要无需变更。
设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。
b_format_dev_version
参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。
当sql_compatibility兼容性参数设置为B且b_format_version设置为“5.7”时,b_format_dev_version才会生效。
参数类型:字符串
参数单位:无
取值范围:空字符串""或 表7中的兼容性配置项。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表 GUC参数分类中对应设置方法进行设置。
设置建议:与b_format_version一起设置,在安装部署后立即设置,后期非必要无需变更。
设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。
m_format_dev_version
参数说明:数据库平台迭代小版本兼容性行为配置项。
当sql_compatibility兼容性参数设置为M时,m_format_dev_version才会生效。
参数类型:字符串
参数单位:无
取值范围:空字符串""或表8中的兼容性配置项。
兼容性配置项 |
兼容性行为控制 |
---|---|
s1 |
影响如下语法:
|
s2 |
影响如下操作符:
影响如下视图:
影响如下语法:
影响以下GUC参数:
影响如下功能:
|
默认值:""
设置方式:该参数属于USERSET类型参数,请参考表 GUC参数分类中对应设置方法进行设置。
设置建议:在安装部署后立即设置,后期非必要无需变更。
设置不当的风险与影响:影响部分SQL的行为,导致兼容性问题。
sql_mode
参数说明:B兼容模式下和M-Compatibility模式下SQL行为控制配置项。该参数可在PDB级别设置。
- 当sql_compatibility兼容性参数设置为B、b_format_version设置为'5.7'、b_format_dev_version设置为's1'时,sql_mode才会生效;或者sql_compatibility兼容性参数设置为M时生效。
- 使用SHOW sql_mode和SELECT @@sql_mode进行查询时,会依据REAL_AS_FLOAT、ANSI_QUOTES、ONLY_FULL_GROUP_BY、NO_UNSIGNED_SUBTRACTION、NO_AUTO_VALUE_ON_ZERO、NO_BACKSLASH_ESCAPES、STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ALLOW_INVALID_DATES、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION及PAD_CHAR_TO_FULL_LENGTH的顺序,大写显示,不因设置时的顺序与大小写而改变。
参数类型:字符串
参数单位:无
取值范围:
- B模式:空字符串""或"strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution,pad_char_to_full_length,no_auto_value_on_zero"中的选项值。
- M-Compatibility模式:除支持B模式参数外,还新增了no_unsigned_subtraction、ansi_quotes、allow_invalid_dates、real_as_float、strict_all_tables、traditional。
每个选项值的含义如表9所述。
兼容性配置项 |
兼容性行为控制 |
B模式参数配置说明 |
M-Compatibility模式参数配置说明 |
---|---|---|---|
strict_trans_tables |
设置时,对输入的参数格式和范围做严格校验。无效值输入或者超过范围时,解析报error。 不设置时,对输入的参数格式和范围做宽松校验,无效值输入或者超过范围时,解析报warning,返回对应数据的0值。 |
可独立设置和取消。 |
可独立设置和取消。 |
only_full_group_by |
不允许出现非GROUP BY的key值、且不是常量和聚集函数的投影列。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
no_zero_in_date |
不允许日期中的年、月、日是0值。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
no_zero_date |
不允许日期是0值(0000-00-00)。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
error_for_division_by_zero |
不允许被0除。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
no_auto_create_user |
无实际作用,仅用作SET SQL_MODE语句包含此选项时不报错的兼容作用。 |
可独立设置和取消。 |
可独立设置和取消。 |
no_engine_substitution |
无实际作用,仅用作SET SQL_MODE语句包含此选项时不报错的兼容作用。 |
可独立设置和取消。 |
可独立设置和取消。 |
pad_char_to_full_length |
用于表中的char类型列格式化输出,包含时输出带有尾部空格的字符串,否则输出不带尾部空格字符串。 |
可独立设置和取消。 |
可独立设置和取消。 |
no_auto_value_on_zero |
包含此选项后,向AUTO_INCREMENT自动增长列插入0值将不会自增。 |
可独立设置和取消。 |
可独立设置和取消。 |
no_unsigned_subtraction |
禁止无符号数减法,如果使用无符号整数进行减法操作,且结果为负数,则会返回一个错误。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
ansi_quotes |
启用ANSI_QUOTES模式,该模式下双引号被视为标识符引用符号,而不是字符串引用符号。在该模式下,如果使用双引号引用表名或列名,则必须使用双引号引用整个名称,而不能使用反引号。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
allow_invalid_dates |
允许插入无效日期,如果启用该选项,则MySQL将允许插入无效的日期,例如'0000-00-00'。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
real_as_float |
默认将REAL类型视为DOUBLE类型,如果启用该选项,则将REAL类型视为FLOAT类型。 |
可独立设置和取消,但无实际作用。 |
可独立设置和取消。 |
strict_all_tables |
与strict_trans_tables效果一致。 |
可独立设置和取消。 |
可独立设置和取消。 |
traditional |
与同时设置strict_trans_tables、strict_all_tables、no_zero_in_date、no_zero_date,error_for_division_by_zero、no_auto_create_user和no_engine_substitution效果一致。 |
可独立设置和取消。
说明:
具体是否生效取决于B兼容模式是否支持。 |
可独立设置和取消。 |
默认值:"strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
foreign_key_checks
参数说明:控制是否开启外键约束的完整性检查。多租场景下,该参数可在PDB级别设置。
该参数仅在M-Compatibility兼容模式下生效。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示启用外键约束的完整性检查。
- off:表示关闭外键约束的完整性检查。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:建议仅在数据导入时,且保证原有数据满足外键约束完整性的场景下,将该参数设置为off,提升导入效率。
设置不当的风险与影响:将该参数设置为off时,对参考表、被参考表的DML操作不会触发外键的完整性检查。DML操作后,表中可能存在与外键完整性冲突的数据,且重新启用该参数时,不会对已有数据是否符合外键约束完整性进行校验。
- DDL操作:
- 在创建表时,无论foreign_key_checks是否启用,都会校验表名是否与已有的外键(被参考表不存在)相匹配,如果匹配,则校验外键定义是否正确,并将被参考表不存在的外键转换为被参考表存在的外键。
- 在添加外键时,如果外键引用的被参考表不存在,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时会创建被参考表不存在的外键。
- 在删除被参考表时,如果指定了CASCADE选项,则无论foreign_key_checks是否启用,都会级联删除参考表上的外键;如果未指定CASCADE选项,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时会将外键转换为参考表不存在的外键。
- 在TRUNCATE被参考表时,如果指定了CASCADE选项,则无论foreign_key_checks是否开启,都会级联删除参考表中的数据;如果未指定CASCADE选项,foreign_key_checks为on时提示报错信息,foreign_key_checks为off时不提示报错信息,也不会级联清除参考表中的数据。
- DML操作:具体行为如表10所示。
操作 |
foreign_key_checks |
被参考表 |
参考表(被参考表存在) |
参考表(被参考表不存在) |
---|---|---|---|---|
INSERT |
on |
无需检查,插入成功。 |
检查完整性,与完整性冲突时,则插入失败。 |
外键字段无法插入非空值。 |
off |
无需检查,插入成功。 |
跳过检查,插入成功。 |
跳过检查,插入成功。 |
|
DELETE |
on |
检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。 |
无需检查,删除成功。 |
无需检查,删除成功。 |
off |
跳过检查,删除成功。 |
无需检查,删除成功。 |
无需检查,删除成功。 |
|
UPDATE |
on |
检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。 |
检查完整性,与完整性冲突时,则更新失败。 |
外键字段无法更新为非空值。 |
off |
跳过检查,更新成功。 |
跳过检查,更新成功。 |
跳过检查,更新成功。 |
|
REPLACE INTO |
on |
检查完整性,与完整性冲突时,根据ACTION操作报错或级联修改。 |
检查完整性,与完整性冲突时,则操作失败。 |
外键字段无法新增或被更新为非空值。 |
off |
跳过检查,操作成功。 |
跳过检查,操作成功。 |
跳过检查,操作成功。 |
auto_increment_increment
参数说明:AUTO_INCREMENT自动增长列的自增步长,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。多租场景下,该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:1 ~ 65535
默认值:1。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据用户需要设置。
设置不当的风险与影响:设置不当会使自增值不符合预期。若参数值小于auto_increment_offset,自动增长列自增时会产生错误。
auto_increment_offset
参数说明:AUTO_INCREMENT自动增长列的起始值,自增值将由auto_increment_offset + N × auto_increment_increment计算而来,N为正整数。多租场景下,该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:1 ~ 65535
默认值:1。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据用户需要设置。
设置不当的风险与影响:设置不当会使自增值不符合预期。若参数值大于auto_increment_increment,自动增长列自增时会产生错误。
auto_increment_cache
参数说明:对自动增长列批量插入或导入触发自增时,预留自增缓存值的个数。预留自增值时,刷新自增计数器为自增缓存值的最大值,缓存值使用完毕之前,自增计数器值不变,触发自增使用缓存的值。多租场景下,该参数可在PDB级别设置。
- 预留的缓存值仅在语句内有效,若预留的自增缓存值没有全部被使用,后续插入语句基于自增计数器触发自增,会出现表中自动增长列的值不连续的情况。
- 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。
- 对已有数据的表添加自动增长列或修改某列为自动增长列时,已有数据触发自增,预留自增缓存值也受此参数影响。
- 此参数不影响本地临时表中的自动增长列。
- 仅在b_format_version='5.7'且b_format_dev_version='s2'时生效。
参数类型:整型
参数单位:无
取值范围:0 ~ 2147483647
- 参数值为0时,自动预留自增缓存值。
- 第一次触发自增时,若已知即将插入自动增长列的行数,预留已知数量的值。
例如:“INSERT INTO table SELECT ...”和COPY FROM触发自增值无法获取即将插入的行数。ALTER TABLE命令表数据重写时,若触发自增,使用统计信息中的reltuples作为即将预留的行数。 “INSERT INTO table VALUES(...),(...),...”由于要分布到不同DN,在某些执行计划中,DN获取不到即将插入的行数。
- 若行数未知,每次预留2^n个值,例如,第一次自增预留1个值,第二次自增预留2个值,第三次预留4个值,第四次预留8个值,以此类推,若预留值个数超过65535,预留65535个值。
- 第一次触发自增时,若已知即将插入自动增长列的行数,预留已知数量的值。
- 参数值不为0时,预留缓存值的数量为参数值。
- 第一次触发自增时,若已知即将插入自动增长列的行数,预留已知数量的值。
- 若行数未知,每次预留auto_increment_cache数量的自增值。
默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值,若默认情况产生自增值不连续的情况,可以根据用户即将批量插入数据量调整参数值。
设置不当的风险与影响:参数值越大,批量插入性能越优,也更可能产生不连续的自增值。
disable_keyword_options
参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。设置该参数的标识符将不会作为关键字使用。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:
- 非M-Compatibility模式数据库下,支持设置以下关键字:advanced、auto_increment、change、charset、columns、colview、compile、completion、containing、convert、csn、datetime、days、db4aishot、dbtimezone、delete_all、disable_all、discard_path、distributed、dumpfile、enable_all、ends、entityescaping、escaped、evalname、event、events、expdp、extend、finish、gsiusable、gsivalid、gsiwaitall、high、ifnull、ilm、ilm_pidx_list、imcvtable、impdp、invisible、json_object、lines、link、lnnvl、load_discard、locked、low、mark、modification、months、nocache、nocolview、noentityescaping、noextend、noscale、nvl2、ordinality、outfile、performance、pivot、populate、priority、public、recover、regexp、regexp_like、rlike、scale、schedule、separator、sessiontimezone、shrink、slave、specification、starting、starts、subpartitions、substr、unpivot、verify、visible、wellformed、xmltype、years、zerofill。
- M-Compatibility模式数据库下,支持设置以下关键字:active、admin、array、authentication、buckets、bulk、challenge_response、clone、colview、component、cume_dist、definition、dense_rank、description、empty、enforced、engine_attribute、except、exclude、factor、failed_login_attempts、finish、first_value、following、force、generate、geomcollection、get_master_public_key、get_source_public_key、grouping、groups、gtid_only、high、histogram、history、imcvtable、inactive、initial、initiate、intersect、invisible、json_table、json_value、keyring、lag、last_value、lateral、lc_collate、lead、least、load_bad、load_discard、location、locked、low、master_compression_algorithms、master_public_key_path、master_tls_ciphersuites、master_zstd_compression_level、match、member、minvalue、move、nested、nocolview、nocycle、node、nomaxvalue、nominvalue、nowait、nth_value、ntile、nulls、nvl、nvl2、of、off、oids、oj、old、operator、optional、ordinality、organization、others、over、owned、password_lock_time、path、percent_rank、persist、persist_only、populate、preceding、prepared、priority、privilege_checks_user、process、random、rank、recursive、recyclebin、reference、registration、reindex、reject、relative、replica、replicas、require_row_format、resource、respect、restart、retain、returning、reuse、role、row_number、scroll、secondary、secondary_engine、secondary_engine_attribute、secondary_load、secondary_unload、sequence、setof、shippable、size、skip、slice、smalldatetime、smalldatetime_format、source_auto_position、source_bind、source_compression_algorithms、source_connect_retry、source_delay、source_heartbeat_period、source_host、source_log_file、source_log_pos、source_password、source_port、source_public_key_path、source_retry_count、source_ssl、source_ssl_ca、source_ssl_capath、source_ssl_cert、source_ssl_cipher、source_ssl_crl、source_ssl_crlpath、source_ssl_key、source_ssl_verify_server_cert、source_tls_ciphersuites、source_tls_version、source_user、source_zstd_compression_level、split、srid、stable、stdin、stdout、stream、strict、substring、sysdate、system、thread_priority、ties、tls、trim、unbounded、unregister、unusable、url、vacuum、valid、varchar2、vcpu、verbose、version、visible、window、within、xmlattributes、xmlconcat、xmlelement、xmlforest、xmlpi、xmlroot、xmltype、zone。
默认值:
- 非M-Compatibility模式数据库下:"datetime,regexp,rlike,zerofill"。
- M-Compatibility模式数据库下:""。
- 在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:该参数打开后,作为关键字使用的部分功能会失效,请谨慎使用。如果要屏蔽的关键字在当前兼容模式数据库的待屏蔽关键字数组里不存在,其他兼容模式数据库里存在时,则产生WARNING;如果其他兼容模式数据库里也不存在,则产生ERROR。
B兼容模式下,datetime、regexp、rlike、zerofill是否作为保留关键字由系统确定,用户无法修改和删除。具体情况为:初始状态下系统会将datetime、regexp、rlike、zerofill添加到参数disable_keyword_options中,此时datetime、regexp、rlike、zerofill不作为保留关键字;设置set b_format_version = '5.7'和set b_format_dev_version = 's1';(或者高于s1的版本)后,系统会将datetime、regexp、rlike、zerofill从参数disable_keyword_options中删除,此时可作为保留关键字使用。
disable_plsql_keyword_options
参数说明:用于将设置的标识符当作非关键字使用。数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。多租场景下,该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:支持的配置项包括PIPE、PIPELINED、RANGE、REPLACE、SUBTYPE。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 该参数打开后,作为关键字使用的部分功能会失效,请谨慎使用。
- 如需取消屏蔽plsql关键字功能,请将该参数设置为空值。
plpgsql.variable_conflict
参数说明:设置同名的存储过程变量和表的列的使用优先级。
参数类型:字符串
参数单位:无
取值范围:
- error:表示遇到存储过程变量和表的列名同名则编译报错。
- use_variable:表示存储过程变量和表的列名同名则优先使用变量。
- use_column:表示存储过程变量和表的列名同名则优先使用列名。
默认值:error
设置方式:该参数属于USERSET类型参数,仅支持表1中对应设置方法3进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
td_compatible_truncation
参数说明:控制是否开启与TD数据库相应兼容的特征。在用户连接上与TD兼容的数据库时,可以将参数设置成为on(即超长字符串自动截断功能启用),该功能启用后,在后续的insert语句中,对目标表中char和varchar类型的列插入超长字符串时,会按照目标表中相应列定义的最大长度对超长字符串进行自动截断。保证数据都能插入目标表中,而不是报错。该参数可在PDB级别设置。
- 超长字符串自动截断功能不适用于insert语句包含外表的场景。
- 如果向字符集为字节类型编码(SQL_ASCII、LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示打开超长字符串自动截断功能。
- off:表示关闭超长字符串自动截断功能。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
uppercase_attribute_name
参数说明:设置列名以大写形式返回给客户端。该参数仅限于A兼容模式下使用。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示列名以大写形式返回给客户端。
- off:表示列名不以大写形式返回给客户端。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_copy_error_log
参数说明:控制gs_loader使用错误表pgxc_copy_error_log的开启和关闭。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启错误表。
- off:表示关闭错误表。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
loader_support_nul_character
参数说明:数据库平台迭代小版本兼容性行为配置项。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:""、"s1"、"s2",具体含义见表11。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 使用gs_loader导入工具开启nul字符(0x00)容错特性时,涉及到此GUC参数的设置。
- 具体参见《工具参考》的“客户端工具 > gs_loader”章节。
a_format_copy_version
参数说明:数据库平台迭代小版本兼容性行为配置项,该参数的值为字符串枚举值。使用gs_loader导入工具新特性时,需要设置对应的值。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表12。
默认值:"。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
兼容性配置项时设置字符串,具体参见《工具参考》的“客户端工具 > gs_loader”章节,使用方式为通过guc_param设置a_format_copy_version参数。
兼容性配置项 |
兼容性行为控制 |
---|---|
s1 |
|
enable_volatile_match_index
参数说明:控制volatile类型函数是否可以匹配索引,仅在DBCOMPATIBILITY为A的数据库中生效。volatile函数匹配索引存在语义风险,stable、immutable函数默认可以匹配索引,且符合语义。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据函数实际易变性进行设置。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_union_all_order
参数说明:控制UNION ALL在主查询未排序的的情况下,是否支持子查询保序。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_immutable_optimization
参数说明:控制immutable类型函数是否可以被优化执行,仅在DBCOMPATIBILITY为A的数据库中生效。如果带有immutable定义的函数违反immutable语义,则其调用结果、其值以及对其调用者的影响均未定义。该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启。
- off:表示关闭。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_object_special_character
参数说明:控制执行CREATE EXTENSION语句时,若脚本文件中使用"@extschema@",此时control文件中schema参数的值是否可以包含["$'\]中任意特殊字符。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启,可以包含["$'\]中任意特殊字符。
- off:表示关闭,不可以包含["$'\]中任意特殊字符。
默认值:off
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:扩展功能为内部使用功能,不建议用户使用。
设置不当的风险与影响:修改该参数取值可能导致数据库出现意料之外的结果,请保持默认值。
enable_implicit_cast_str2num
参数说明:在整型数据类型与字符串数据类型进行比较操作符或者算术运算操作符运算时,控制字符串是否能够转换为NUMERIC。
仅在a_format_version='10c',a_format_dev_version='s1'时生效。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启,
比较操作符(>、>=、<、<=、=、<>):字符串数据类型会被隐式转换成NUMERIC类型。
算术操作符(+、-、*、/、%、^):整型数据类型和字符串数据类型都会被隐式转换成NUMERIC类型。
- off:表示关闭,字符串数据类型会被隐式转换成整型数据类型。
默认值:on
设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
a_format_disable_func
参数说明:禁用指定的系统函数。该参数的值由若干个系统函数OID值用逗号隔开组成。设置该参数的系统函数将不能被调用。当某一系统函数不能满足用户需求并且需要使用相同函数名的自定义函数时,可使用该功能。该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:字符串,由若干个系统函数OID值用逗号隔开组成。
默认值:""。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_convert_illegal_char
参数说明:对输出结果中的非法编码是否不进行校验并以占位符替换显示。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启,特殊字符在查询时将替换为convert_illegal_char_mode参数指定符号的编码。
- off:表示关闭,查询结果中包含的超出当前字符集编码规则外的编码时会在校验后报错。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值,仅在数据中存在特殊字符且需要对特殊字符进行强制不报错处理时开启该参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 当数据库字符集为utf8、zhs16gbk、gb18030、gb18030-2022、latin1,enable_convert_illegal_char=on时生效,且当数据库客户端与服务端字符集不相同时,非法编码将以占位符形式显示。
- 特殊字符范围:本文所指的特殊字符范围仅包括完全异常编码和混合编码,不支持\u0000字符。若字符编码中包含\u0000字符,在使用时通常会在\u0000处截断,无法保证数据的完整性。
- 在数据库客户端与服务端字符集不相同时,超出当前服务端字符集外的特殊字符只能通过函数dbe_raw.cast_to_varchar2()写入或导入导出工具写入数据库。
- 当开启GUC参数时,特殊字符在下表所列的函数、高级包函数中的表现为:
- 在客户端与服务端字符集一致时,特殊字符在查询时不报错,与开启GUC参数前的行为保持一致。
- 在客户端与服务端字符集不一致时,特殊字符在查询时显示为占位符(默认为?)。
- 不建议客户使用函数处理包含特殊字符的字符串,下表所列函数处理包含特殊字符的字符串不会产生报错,但无法保证结果的正确性。
序号 |
函数名/高级包函数名 |
---|---|
1 |
bit_length(string) |
2 |
btrim(string text [, characters text]) |
3 |
char_length(string) character_length(string) |
4 |
chr(cvalue int|bigint) chr(integer) |
5 |
concat(str1,str2) |
6 |
concat_ws(sep text, str"any" [, str"any" [, ...] ]) |
7 |
decode(string text, format text) |
8 |
dump(expr[, return_fmt [, start_position [, length ] ] ]) |
9 |
encode(data bytea, format text) |
10 |
find_in_set(text, set) |
11 |
format(formatstr text [, str"any" [, ...] ]) |
12 |
left(str text, n int) |
13 |
length(string) |
14 |
lengthb(text/bpchar) |
15 |
ltrim(string [, characters]) |
16 |
md5(string) |
17 |
notlike(x bytea name text, y bytea text) |
18 |
octet_length(string) |
19 |
overlay(string placing string FROM int [for int]) |
20 |
quote_ident(string text) |
21 |
quote_literal(string text) |
22 |
quote_nullable(string text) |
23 |
rawcat(raw,raw) |
24 |
regexp_count(string text, pattern text [, position int [, flags text]]) |
25 |
regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]]) |
26 |
regexp_like(source_string, pattern [, match_parameter]) regexp_like(text,text,text) |
27 |
regexp_matches(string text, pattern text [, flags text]) |
28 |
regexp_replace(string, pattern, replacement [,flags ]) |
29 |
regexp_split_to_array(string text, pattern text [, flags text ]) |
30 |
regexp_split_to_table(string text, pattern text [, flags text]) |
31 |
regexp_substr(source_char, pattern) regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]]) |
32 |
repeat(string text, number int ) |
33 |
repexp_replace(string text, pattern text [, replacement text [, position int [, occurrence int [, flags text]]]]) |
34 |
replace(string text, from text, to text) |
35 |
replace(string, substring) |
36 |
reverse(str) |
37 |
right(str text, n int) |
38 |
rtrim(string [, characters]) |
39 |
sha(string) |
40 |
sha1(string) |
41 |
sha2(string,hash_length) |
42 |
split_part(string text, delimiter text, field int) |
43 |
substring(string [from int] [for int]) substring(string from pattern for escape) substring(string from pattern) |
44 |
substring_inner(string [from int] [for int]) |
45 |
tconvert(key text, value text) |
46 |
to_single_byte(char) |
47 |
translate(string text, from text, to text) |
48 |
trim([leading |trailing |both] [characters] from string) |
49 |
unistr(string) |
50 |
vsize(expr) |
51 |
PKG_UTIL.RAW_CAST_FROM_VARCHAR2 |
52 |
PKG_UTIL.LOB_CONVERTTOCLOB |
53 |
PKG_UTIL.LOB_RAWTOTEXT |
54 |
PKG_UTIL.LOB_TEXTTORAW |
55 |
PKG_UTIL.RAW_CAST_TO_VARCHAR2 |
56 |
DBE_OUTPUT.PUT |
57 |
DBE_OUTPUT.PUT_LINE |
fix_func_selection
参数说明:是否优化函数匹配策略。多租场景下,该参数可在PDB级别设置。
catlist顺序问题:若用户自定义函数与系统函数存在冲突,数据库系统在选择函数时,会受该系统函数在数据库系统中的注册顺序影响,从而导致选择函数结果不同。
参数类型:字符串
参数单位:无
取值范围:""、"catlist"。
- "":不进行优化,与505.1.0版本之前的版本保持一致。
- "catlist":优化catlist顺序问题,始终优先选择系统函数并执行。
默认值:
- "catlist":新安装的数据库的默认值。
- "":505.1.0版本之前的数据库升级后的默认值。
- 在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_force_create_obj
参数说明:用于控制一次性入库功能的开启与关闭。开启该参数后,若创建或重建函数、包时存在未定义的对象,会创建一个虚拟的对象用于编译,并在函数体编译的过程中通过try catch捕获异常,使创建或重建过程能够运行成功。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:打开一次性入库功能。
- off:关闭一次性入库功能。
默认值:off。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据需求场景进行配置。若无特殊情况,建议开启对应功能。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
ddl_invalid_mode
参数说明:用于控制在对函数或包做DROP操作时,对依赖其的对象(函数或包)进行的行为。多租场景下,该参数可在PDB级别设置。
级联失效依赖对象的过程中,当出现了已失效的对象时,中断级联失效操作。
参数类型:枚举类型
参数单位:无
取值范围:
- delete:对函数或包做DROP操作时,级联删除依赖其的对象(函数或包)。
- invalid:对函数或包做DROP操作时,级联失效依赖其的对象(函数或包)。
默认值:delete。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:根据需求场景进行配置。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
max_allowed_packet
参数说明:M-Compatibility模式数据库行为配置项,用于表示字符串函数返回值上限。若实际结果超过该上限,则会告警,并返回NULL值。
参数类型:整型
参数单位:字节
取值范围:1024 ~ 1073741824(取值只能是1024的倍数,非倍数时将向下舍入到最接近的倍数)。
默认值:4194304
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
div_precision_increment
参数说明:M-Compatibility模式数据库行为配置项。用于设置除法结果精度提升值,即除法运算结果的小数位数等于被除数的小数位数加上该参数值。多租场景下,该参数可在PDB级别设置。
参数类型:整型
参数单位:无
取值范围:0 ~ 30
默认值:4。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
enable_m_format_hook
参数说明:M-Compatibility模式数据库行为配置项。该参数控制M-Compatibility模式hook是否生效。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示M-Compatibility模式数据库允许挂载对应解析执行hook。
- off:表示M-Compatibility模式数据库不挂载对应解析执行hook。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:当前参数仅针对当前未完全适配的外部工具使用,不允许用户使用。
设置不当的风险与影响:无
net_write_timeout
参数说明:M-Compatibility模式数据库行为配置项。该参数用于设置在中止写入之前等待块写入连接的秒数。多租场景下,该参数可在PDB级别设置。
参数类型:整型
参数单位:秒
取值范围:1 ~ 31536000
默认值:60。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。取值不能带单位。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
该参数仅用于适配MySQL JDBC驱动,功能暂不生效。
init_connect
参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端为每个连接的客户端执行的字符串。
参数类型:字符串
参数单位:无
取值范围:无
默认值:""
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@init_connect”查询,并需要将m_format_dev_version设置为's2'。
interactive_timeout
参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端在关闭交互式连接之前等待其活动的秒数。返回值与session_timeout一致。
参数类型:整型
参数单位:秒
取值范围:0 ~ 86400
默认值:600
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@interactive_timeout”查询。
wait_timeout
参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端在关闭非交互式连接之前等待活动的秒数。返回值与session_timeout一致。
参数类型:整型
参数单位:秒
取值范围:0 ~ 86400
默认值:600
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@wait_timeout”查询。
license
参数说明:M-Compatibility模式数据库行为配置项。该参数表示许可证类型。
参数类型:字符串
参数单位:无
取值范围:无
默认值:""
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@license”查询。
lower_case_table_names
参数说明:M-Compatibility模式数据库行为配置项。该参数表示表名是否对大小写敏感。
参数类型:整型
参数单位:无
取值范围:
- 0:表示表名将按照指定的大小写形式进行存储,并以区分大小写形式进行比较。
- 1:表示表名将按照小写形式进行存储,并以不区分大小写形式进行比较。
默认值:0
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@lower_case_table_names”查询。
net_buffer_length
参数说明:M-Compatibility模式数据库行为配置项。该参数用于控制客户端线程关联的连接缓冲区和结果集缓冲区的初始大小。
参数类型:整型
参数单位:Byte
取值范围:1024 ~ 1048576
默认值:8192
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@net_buffer_length”查询。
performance_schema
参数说明:M-Compatibility模式数据库行为配置项。该参数表示是否支持performance信息的查询。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示支持performance信息的查询。
- off:表示不支持performance信息的查询。
默认值:off
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@performance_schema”查询。
query_cache_type
参数说明:M-Compatibility模式数据库行为配置项。该参数表示查询缓存类型。
参数类型:字符串
参数单位:无
取值范围:
- on:表示支持查询缓存。
- off:表示不支持查询缓存。
默认值:off
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@query_cache_type”查询。
query_cache_size
参数说明:M-Compatibility模式数据库行为配置项。该参数表示为缓存查询结果分配的内存量。
参数类型:整型
参数单位:Byte
取值范围:0 ~ 18446744073709551615
默认值:0
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@query_cache_size”查询。
system_time_zone
参数说明:M-Compatibility模式数据库行为配置项。该参数表示服务端系统时区。同log_timezone。
参数类型:字符串
参数单位:无
取值范围:与log_timezone一致。
默认值:根据OS时区设置。
设置方式:该参数暂不支持设置,只能查看。
设置建议:该参数不允许用户进行设置,只能查看。
设置不当的风险与影响:无
该参数仅用于适配MySQL JDBC驱动,仅可通过“SELECT @@system_time_zone”查询。
time_zone
参数说明:M-Compatibility模式数据库行为配置项。该参数表示当前会话时区。同TimeZone。
参数类型:字符串
参数单位:无
取值范围:支持'+08:00'的HH:MM时间格式和'Asia/Shanghai'的地域形式取值。
时间格式为:[+][H]H[:MM]、-[H]H[:MM],以'+'或'-'开头,'+'可省略。取值范围为:'-12:59' ~ '+13:00'。
默认值:"PRC"
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
该参数仅用于适配MySQL JDBC驱动,可通过“SELECT @@time_zone”查询。将m_format_dev_version设置为's2'后,才可支持设置time_zone参数。
gs_format_behavior_compat_options
参数说明:gs_format_behavior_compat_options用于选择GaussDB内部系统函数配置项。多租场景下,该参数可在PDB级别设置。
参数类型:字符串
参数单位:无
取值范围:当前只支持表14中的兼容性配置项,当设置多个兼容性配置项时,相邻配置项之间用逗号隔开。在PDB场景内,若未设置该参数,则承接来自全局的设置。
默认值:"karatsuba"
兼容性配置项 |
兼容性行为控制 |
---|---|
sqrt_karatsuba |
|
allow_textconcat_null |
|
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:控制一些兼容性特性是否可用,若要更改,请在理解参数含义后谨慎操作,避免因误操作产生意料之外的风险。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
support_zero_character
参数说明:当数据中包含Unicode编码为\u0000的字符(以下简称0字符)时,数据库是否取消对0字符的校验并且正确处理而不进行截断操作。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启,数据库取消对0字符的校验,能够正确插入和处理0字符,使数据在处理过程中不发生截断。
- off:表示关闭,数据库保留对0字符的校验,部分函数在处理0字符时会发生报错或数据截断。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值,仅在数据中存在0字符且需要对0字符进行正确处理时开启该参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 该参数仅在数据库兼容性为A兼容模式且所有节点都设置为support_zero_character=on时生效。
- 当support_zero_character=on时,如果数据类型为CHAR(n)、CHARACTER(n)、NCHAR(n)、VARCHAR(n)、CHARACTER VARYING(n)、VARCHAR2(n)、NVARCHAR2(n)、TEXT或CLOB类型,数据库可以正确插入并处理0字符;如果包含0字符的字符串数据可以显式转换为JSON/JSONB、XML、XMLTYPE、数值类型、货币类型、时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、HLL类型、范围类型、对象标识符类型、aclitem类型或向量类型时,会在0字符处发生截断;如果字符串类型显式转换为UUID类型时,会在0字符处发生报错。
- 数据库仅支持以下写入0字符的方式:
- 通过JDBC连接数据库时,0字符可以通过文本方式写入数据库。
- 通过dbe_raw.cast_to_varchar2函数直接将0字符编码写入数据库。
- 通过copy/gs_loader工具将0字符编码写入数据库。
- 在开启GUC参数时,不同字符集之间进行转换时,0字符会直接返回,不再发生报错。
- gsql客户端版本应与数据库版本匹配,在开启GUC参数时,若gsql端接收到的数据中包含0字符,gsql工具会将0字符转换为空格后进行打印输出。若使用旧版本gsql连接数据库,包含0字符的数据仍存在显示被截断的情况。
- 当开启GUC参数时,0字符在表15所列的函数、高级包函数中的表现为:函数能够正常处理0字符,不会发生在0字符处截断的情况。
- 部分高级包接口入参为Schema名或object名,理论上不能含有0字符,因此对表16中的函数添加0字符校验,当入参包含0字符时进行报错处理(原表现为0字符后数据被截断)。
- 当support_zero_character=on时,若处理的数据中不包含0字符,函数性能无明显劣化;若处理的数据中包含0字符,对比相同数量的有效字符时,initcap、upper、lower、nls_upper、nls_lower函数性能劣化程度与数据中0字符个数紧密相关,即0字符个数越多,性能劣化越严重。
- 当support_zero_character=on时,若逻辑解码工具读取到数据中包含的0字符,则会将0字符转换为空格后进行打印输出(原表现为0字符后数据被截断)。
序号 |
函数名/高级包函数名 |
---|---|
1 |
btrim(string text [, characters text]) |
2 |
char_length(string) 或 character_length(string) |
3 |
chr(cvalue int|bigint) |
4 |
chr(integer) |
5 |
coalesce(expr1, expr2, ..., exprn) |
6 |
concat(str1,str2) |
7 |
concat_ws(sep text, str"any" [, str"any" [, ...] ]) |
8 |
convert(string bytea, src_encoding name, dest_encoding name) |
9 |
convert_from(string bytea, src_encoding name) |
10 |
convert_to(string text, dest_encoding name) |
11 |
decode(base_expr, compare1, value1, Compare2,value2, … default) |
12 |
dump(expr[, return_fmt [, start_position [, length ] ] ]) |
13 |
encode(data bytea, format text) |
14 |
format(formatstr text [, str"any" [, ...] ]) |
15 |
greatest(expr1 [, ...]) |
16 |
group_concat([DISTINCT | ALL] expression [,expression ...] [ORDER BY { expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ] } [,...]] [SEPARATOR str_val]) |
17 |
initcap(string) |
18 |
instr(string,substring[,position,occurrence]) instr(text,text,int,int) |
19 |
instrb(text,text,int,int) |
20 |
least(expr1 [, ...]) |
21 |
left(str text, n int) |
22 |
length(string) length(string bytea, encoding name ) |
23 |
lengthb(text/bpchar) |
24 |
listagg(expression [, delimiter]) WITHIN GROUP(ORDER BY order-list) |
25 |
lower(string) |
26 |
lpad(string text, length int [, fill text]) |
27 |
ltrim(string [, characters]) |
28 |
nls_lower(string [, nlsparam]) |
29 |
nls_upper(string [, nlsparam]) |
30 |
nullif(expr1, expr2) |
31 |
nvl( expr1 , expr2 ) |
32 |
nvl2( expr1 , expr2,expr3 ) |
33 |
overlay(string placing string FROM int [for int]) |
34 |
position(substring in string) |
35 |
quote_nullable(string text) |
36 |
regexp_count(string text, pattern text [, position int [, flags text]]) |
37 |
regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]]) |
38 |
regexp_like(text,text,text) regexp_like(source_string, pattern [, match_parameter]) |
39 |
regexp_matches(string text, pattern text [, flags text]) |
40 |
regexp_replace(string, pattern, replacement [,flags ]) |
41 |
regexp_split_to_array(string text, pattern text [, flags text ]) |
42 |
regexp_split_to_table(string text, pattern text [, flags text]) |
43 |
regexp_substr(source_char, pattern) regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]]) |
44 |
repeat(string text, number int ) |
45 |
replace(string text, from text, to text) replace(string, substring) |
46 |
reverse(str) |
47 |
right(str text, n int) |
48 |
rpad(string text, length int [, fill text]) |
49 |
rtrim(string [, characters]) |
50 |
similar_escape(pat text, esc text) |
51 |
split_part(string text, delimiter text, field int) |
52 |
string [NOT] LIKE pattern [ESCAPE escape-character] |
53 |
string || string 或 string || non-string 或 non-string || string |
54 |
string_agg(expression, delimiter) |
55 |
strpos(string, substring) |
56 |
substr(string,from) substr(bytea,from,count) substr(string,from,count) |
57 |
substrb(text,int) substrb(text,int,int) |
58 |
substring(string [from int] [for int]) substring(string from pattern for escape) substring(string from pattern) substring_inner(string [from int] [for int]) |
59 |
translate(string text, from text, to text) |
60 |
trim([leading |trailing |both] [characters] from string) |
61 |
unistr(string) |
62 |
upper(string) |
63 |
PKG_UTIL.LOB_GET_LENGTH |
64 |
PKG_UTIL.LOB_READ |
65 |
PKG_UTIL.LOB_WRITE |
66 |
PKG_UTIL.LOB_APPEND |
67 |
PKG_UTIL.LOB_COMPARE |
68 |
PKG_UTIL.LOB_MATCH |
69 |
PKG_UTIL.LOB_READ_HUGE |
70 |
PKG_UTIL.LOB_WRITEAPPEND_HUGE |
71 |
PKG_UTIL.LOB_APPEND_HUGE |
72 |
PKG_UTIL.LOB_COPY_HUGE |
73 |
PKG_UTIL.LOB_CONVERTTOBLOB_HUGE |
74 |
PKG_UTIL.IO_PRINT |
75 |
PKG_UTIL.RAW_CAST_FROM_VARCHAR2 |
76 |
PKG_UTIL.FILE_READ |
77 |
PKG_UTIL.FILE_READLINE |
78 |
PKG_UTIL.APP_READ_CLIENT_INFO |
79 |
PKG_UTIL.APP_SET_CLIENT_INFO |
80 |
PKG_UTIL.LOB_CONVERTTOBLOB |
81 |
PKG_UTIL.LOB_CONVERTTOCLOB |
82 |
PKG_UTIL.MATCH_EDIT_DISTANCE_SIMILARITY |
83 |
PKG_UTIL.RAW_CAST_TO_VARCHAR2 |
84 |
PKG_UTIL.APP_SET_MODULE |
85 |
PKG_UTIL.APP_READ_MODULE |
86 |
PKG_UTIL.APP_SET_ACTION |
87 |
PKG_UTIL.APP_READ_ACTION |
88 |
DBE_OUTPUT.PRINT_LINE |
89 |
DBE_OUTPUT.PRINT |
90 |
DBE_OUTPUT.GET_LINE |
91 |
DBE_OUTPUT.GET_LINES |
92 |
DBE_OUTPUT.PUT |
93 |
DBE_OUTPUT.PUT_LINE |
94 |
DBE_UTILITY.CANONICALIZE |
95 |
DBE_UTILITY.COMMA_TO_TABLE |
96 |
DBE_UTILITY.NAME_TOKENIZE |
97 |
DBE_UTILITY.TABLE_TO_COMMA |
98 |
DBE_UTILITY.CANONICALIZE_RET |
99 |
DBE_UTILITY.COMMA_TO_TABLE_FUNC |
100 |
DBE_UTILITY.NAME_SEPARATE |
101 |
DBE_UTILITY.NAME_TOKENIZE_FUNC |
102 |
DBE_UTILITY.NAME_TOKENIZE_LOWER |
103 |
DBE_UTILITY.NAME_TOKENIZE_LOWER_FUNC |
104 |
DBE_UTILITY.TABLE_TO_COMMA_FUNC |
序号 |
高级包函数名 |
---|---|
1 |
PKG_UTIL.SESSION_SET_CONTEXT |
2 |
PKG_UTIL.UTILITY_COMPILE_SCHEMA |
3 |
PKG_UTIL.GS_COMPILE_SCHEMA |
4 |
DBE_UTILITY.NAME_RESOLVE |
5 |
DBE_UTILITY.COMPILE_SCHEMA |
6 |
DBE_UTILITY.SEARCH_CLASS_WITH_NSPOID_ONAME_TYPE |
7 |
DBE_UTILITY.SEARCH_OBJECTS |
8 |
DBE_UTILITY.SEARCH_OBJECTS_SYNONYM_FILL_SCHEMA |
9 |
DBE_UTILITY.SEARCH_PROCEDURE_WITH_NSPOID_ONAME |
10 |
DBE_UTILITY.SEARCH_SYNONYM_WITH_NSPOID_ONAME |
enable_case_intervaltonumeric
参数说明:控制CASE语句中是否支持INTERVAL转NUMERIC,该参数仅在A兼容模式下生效。
参数类型:布尔型
参数单位:无
取值范围:
- on:CASE语句中支持INTERVAL转NUMERIC。
- off:CASE语句中不支持INTERVAL转NUMERIC。
默认值:off
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若设置为on,后续修改为off,可能导致现有CASE语句报错。
enable_ecpg_cursor_duplicate_operation
参数说明:ECPG控制在A兼容下是否支持重复打开/关闭游标,仅在ECPG连接A兼容数据库时生效。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:ECPG连接A兼容数据库时,支持重复打开/关闭游标。
- off:ECPG连接A兼容数据库时,不支持重复打开/关闭游标。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若设置为off,重复打开/关闭游标时会报错。
直接安装本版本数据库时,该参数值为on。从老版本升级到当前版本时,该参数值为off。
format_pg_to_timestamp
参数说明:在PG模式下,控制to_timestamp(string [, fmt])函数的行为。开启后,如果有不支持的格式,自动跳过,当前版本不支持FF,FF7,FF8,FF9,RR,RRRR,SYYYY,x,X等格式;支持早于294277-01-01 00:00:00之前的时间日期和负数年份(转化成公元前);FF1-FF6会把超出精确度的毫秒四舍五入;当时间日期中相同项冲突时(例如DDD和DD所指的天数不同时)返回一个格式正确的时间不会报错,具体冲突行为如表17所示。多租场景下,该参数可在PDB级别设置。
参数类型:布尔型
参数单位:无
取值范围:
- on:实现上述功能。
- off:取消实现上述功能。
默认值:on。在PDB场景内,若未设置该参数,则继承来自全局的设置。
设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:开启会导致GaussDB不支持的fmt失效。
synonym_priv_strict_check
参数说明:控制通过同义词搜索对象时,是否检查同义词关联对象的访问权限。
参数类型:布尔型
参数单位:无
取值范围:
- on:通过同义词检索对象时,检查是否具有同义词关联对象的访问权限。
- off:通过同义词检索对象时,不检查是否具有同义词关联对象的访问权限。
默认值:on。
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若设置为off,通过同义词访问对象时,不检查对象的访问权限,可能构成越权风险。
直接安装505.2.0版本数据库时,该参数值为on。从505.2.0之前版本升级到当前版本时,该参数值为off。
forbid_public_funcname_same_with_sysfunc
参数说明:控制在创建函数及RENAME函数时,是否禁止PUBLIC函数与pg_catalog下的系统函数名称相同。
参数类型:布尔型
参数单位:无
取值范围:
- on:创建函数及RENAME函数时,禁止PUBLIC函数与pg_catalog下的系统函数名称相同。
- off:创建函数及RENAME函数时,允许PUBLIC函数与pg_catalog下的系统函数名称相同。
默认值:on。
设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值。
设置不当的风险与影响:若设置为off,允许PUBLIC函数与pg_catalog下的系统函数名称相同。
直接安装505.2.0版本数据库时,该参数值为on。从505.2.0之前版本升级到当前版本时,该参数值为off。