openGauss插件使用指南:GUC参数说明(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:关闭时,支持对属性是非空的列插入NULL值。具体行为受sql_ignore_strategy控制,overwrite_null时插入默认值,ignore_null时忽略该行;且仅在非显式插入单行NULL值生效。(涉及的类型同上面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语法调用存储过程时,限制出参必须为用户自定义变量的格式。

  • treat_bxconst_as_binary: 控制b''、x''字符串在词法分析时的默认类型。当设置此参数时,将b''、x''数据作为binary类型进行存储和使用。当不设置此参数时,将b''、x''数据作为bit类型进行存储和使用。

    语句不设置treat_bxconst_as_binary表现设置treat_bxconst_as_binary表现Mysql表现
    select b'110010'50'2'2
    select conv(b'110010', 16, 10)5022
    select b'110010' + 1;51351
    create table t_bit(a bit(16));
    insert into t_bit values(b'11001000110010');
    select conv(a, 16, 10) from t_bit;
    128503412850
  • not_escape_zero_in_binary:对于binary类型是否取消将\0字符转义成\000字符输出,该参数只影响JDBC的输出结果,具体表现如下所示:

    select cast('2024' as binary(10))
    --开启not_escape_zero_in_binary时候的输出结果结果如下:
    32303234000000000000
    
    --关闭not_escape_zero_in_binary时候的输出结果结果如下:
    323032345C3030305C3030305C3030305C3030305C3030305C303030
    

该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值