openGauss5.1插件参考:GUC参数说明
dolphin.sql_mode
取值范围:字符串
默认值:'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date,pad_char_to_full_length,auto_recompile_function,error_for_division_by_zero'
参数说明:参数值为逗号间隔的字符串,仅允许合法字符串设定,不合法情况下,启动后报warning。同样,设置时候,如果新值非法,则报warning并且不修改老值。当前有几种场景会用到sql_mode:
sql_mode_strict:严格模式控制openGauss在执行会产生数据变化的SQL时(如INSERT、UPDATE、DELETE等),如何处理无效值或者空值。插入不符合当前列类型的值时,会进行数据转换;分两种场景,insert into table values(…) 和insert into table select … 主要涉及到各种数据类型之间的互相转换,目前涉及的类型有tinyint[unsigned],smallint[unsigned],int[unsigned],bigint[unsigned],float,double,numeric,clob,char和varchar;
sql_mode_strict:插入的列值长度超过此列所限定的长度时,赋予该列最大或最小值,涉及的类型有tinyint[unsigned],smallint[unsigned],int[unsigned],bigint[unsigned],float,double,numeric,clob,char和varchar;
sql_mode_strict:insert时,属性是非空且没有默认值的列,且没有在insert的列表中,则为其添加默认值;(涉及的类型同上面sql_mode_strict的描述)
sql_mode_strict:支持对属性是非空且没有默认值的列显式插入default;(涉及的类型同上面sql_mode_strict的描述)
sql_mode_strict:对于不会改变数据的SQL语句,如
SELECT
,在严格模式下处理无效值或者空值时仅产生告警,不会报错。效果等同于没有开启严格模式。sql_mode_full_group:
- 出现在select列表中的列(不使用聚合函数),是否一定要出现在group by子句中。当处在sql_mode_full_group模式(默认模式)下,如果select列表中的列没有使用聚合函数,也没有出现在group by子句,那么会报错,如果不在此模式下,则会执行成功,并在所有符合条件的元组中选取第一个元组。
- 出现在order by中的列,是否一定要出现在distinct中(注意是distinct,不是distinct on)。当处在sql_mode_full_group模式(默认模式)下,不允许没有出现在distinct中的列出现在order by子句中,否则允许。
pipes_as_concat:控制 || 当成连接符还是或操作符
ansi_quotes:主要是针对出现在各种需要使用双引号表示字符串值的地方。当ansi_quotes打开,就表示此时的双引号中的内容要作为对象引用看待;当ansi_quotes关闭时,表示双引号中的内容要作为字符串的值看待。
no_zero_date:控制 '0000-00-00' 是否为合法日期,支持DATE、DATETIME类型
参数 表现 no_zero_date, sql_mode_strict 非法日期,报错(使用update/insert ignore时告警) no_zero_date 非法日期,告警 sql_mode_strict 合法日期,无告警 – 合法日期,无告警 pad_char_to_full_length:控制char类型查询时是否删除尾部空格。
auto_recompile_function:控制严格模式下,在执行会产生数据变化的SQL时(如INSERT、UPDATE、DELETE等),如果SQL中包含用户自定义的存储过程或函数,是否自动对存储过程或函数进行重编译,自动重编译能够让opengauss正确处理存储过程或函数中的无效值,但是对存储过程或函数的执行性能会带来一定的影响。
error_for_division_by_zero:控制除数为0时是否报错(包含
/
,mod
,div
等除法含义的操作符),最终除0的表现还受严格模式的控制。参数 表现 error_for_division_by_zero, sql_mode_strict 除数为0,在SELECT场景下告警,其余场景报错 error_for_division_by_zero 除数为0,告警 sql_mode_strict 除数为0,无报错,无告警 – 除数为0,无报错,无告警 block_return_multi_results: 控制在使用CALL语法调用存储过程时,存储过程中可以使用select语句进行查询并返回查询语句的结果。当不设置此参数时,存储过程中的查询语在执行时会报错,开启参数后,可以正常执行并立刻返回此查询语句的结果集,不等待存储过程执行完毕。开启后,使用CALL语法调用存储过程时,限制出参必须为用户自定义变量的格式。