VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

V2.2 Build 10(Patch No.7)

发布日期

2023年04月12日

升级方式

VPatch工具升级。可参考使用VPatch进行版本控制

commit 标识:12635

新特性

1、新增MySQL兼容性:

  • 支持如下函数:

    • DATE,使用函数提取日期或日期时间表达式中的日期部分。

    • STR_TO_DATE,使用函数将时间格式的字符串按照所提供的显示格式转换为DATETIME类型的值。

  • 支持使用UNION [ALL]语句将两个或多个查询结果合并,并通过ORDER BY子句排序,参见支持在UNION [ALL] 语句中使用ORDER BY 子句

  • 支持使用+运算符时,若左值为”0”且右值为任意带数字的字符串(charnum),则0 + charnum将得到与原字符串charnum中相同精度的浮点数或者整数,参见+运算符精度处理

  • 支持INNER JOIN连接条件使用WHERE子句。

  • 支持将反引号解释为标识符,遇到反引号时会将反引号中的内容解释为标识符,同时关键字也会作为标识符返回。详见反引号解释为标识符

  • 支持当主键或唯一性索引有多个字段时,若满足多行需要update的条件,则会更新第一行记录,参见INSERT…ON DUPLICATE KEY UPDATE

2、新增Oracle兼容性:

  • 支持重载包函数时,对参数名进行检查,详情参看重载包函数时检查参数名

  • 编译控制选项pragma serially_reusable,可以将package设定为连续可复用包,此选项可以使得对应package分配的内存在调用后被释放,复用package时包内变量都被初始化为其默认值,参见CREATE PACKAGECREATE PACKAGE BODY

  • 创建视图时支持使用with read only创建只读视图,参见CREATE VIEW创建只读视图

  • TYPE语法增强:在创建type时,支持对成员函数进行重写,支持定义成员变量和成员函数,详见CREATE TYPE

3、PostgreSQL兼容模式下,支持GROUP_CONCAT函数,将group by产生的同一个分组的值连接起来,每个字符串之间可以用特定的符号进行分隔。

4、查询分区表时,支持Range分区进行like模糊匹配的条件过滤查询,可以先通过分区裁剪,在规划查询阶段裁剪掉不需要的分区,只扫描满足条件的分区,提高查询效率。参见分区表概述

5、新增支持ltree插件,插件版本为V1.2。

特性优化

精简了数据库日志,不打印无效日志。

使用限制

使用PL/Python实现自定义过程语言时,禁止使用plpy模块。

缺陷修复

1、【1024781】修复了由于vb_bulkload没有添加按字符计算长度的处理,导致使用vb_bulkload向表字段类型为character(3 char)的表中导入范围内数据后报错,提示超长的问题。

2、【1024586】修复了由于报错信息的类别没有固定为error,当plsql_show_all_error打开时,报错信息为notice,没有终止代码执行导致的数据库宕机问题。

3、【1024584】修复了由于在connect by中使用同义词查询时,没有使用正确的表名进行列名匹配,导致无法找到对应列的问题。

4、【1024583】修复了由于函数接口xmlNodeGetContent获取了内容指针,但没有释放对应的对象内存,导致内存泄漏的问题。

5、【1024582】修复了NVL2函数实际支持类型与\df显示内容不符的问题。

6、【1024573】修复了由于没有补充升级脚本导致系统表未更新,则创建object失败的情况。

7、【1024573】修复了由于show create table命令会调用视图,解析字段类型为数字类型时,都会将其精度作为typmod,但bigint,smallint等类型的精度是固定化的,不允许指定typmod。导致在MySQL兼容模式下,执行show create table得到的DDL语句,转换bigint出错的情况。

8、【1024568】修复了调用date函数报语法错误的问题。

9、【1024565】修复了由于where条件中rowid对应的类型ROWIDTYPEOID没有下推,导致当以rowid作为条件查询表数据时报错的问题。

10、【1024564】修复了由于connect_by_root函数进行路径搜索判断时,对输入做了去掉结尾空格的处理,当调用的处理函数遇到全为空格的情况时会返回空,导致后续进行字符串比较函数strcmp时数据库宕机的情况。

11、【1024563】修复了由于自治事务的bgworker线程日志过多时将共享内存塞满,写共享内存被阻塞,但是主线程需等到bgworker执行任务完成结束后才读取共享内存的消息,则形成死锁,导致数据库宕机的情况。

12、【1022062】修复了由于gs_encrypted_proc元数据表内部更新时,第5个字段错误使用了INT4OID类型,导致直接使用analyze gs_encrypted_proc命令时触发数据库宕机的情况。

13、【1020066】修复了由于将存储plpython函数的变量修改为会话变量后,变量结构体内部分成员所在的内存仍然为线程内存,则生命周期不一致,导致数据库宕机的情况。

14、【1021532】修复了由于复制到源lob时,不需要复制的内容的长度逻辑未处理,则后续复制的起点出错,导致使用dbms_lob包中的copy存储过程报错的情况。

15、【1024499】修复了由于语法文件中对column的处理有问题导致使用alter命令添加列,列名使用大写时执行失败的情况。

16、【1024193】修复了在MySQL兼容模式下,由于least条件表达式对空值的处理不同,导致least条件表达式执行结果与MySQL不符的情况。

17、【1024192】修复了vb_dump导出时关闭参数check_function_bodies,则跳过了创建pkg时对包内函数的编译,导致使用vb_restore恢复时创建包失败的问题。

18、【1010475】修复了存储过程中当字符串变量拼接超过65个括号后报错的问题。

19、【1023678】修复了由于vb_probackup未适配江南天安,进行完整性校验时比较校验码发现不一致,引起备份失败的情况。

20、【1023388】修复了由于cstore表索引扫描时会通过比较索引表的属性名和堆表的属性名来修复targetlist,而修改表的属性名时,对应索引的属性名不会因此而改变,则会出现修复前和修复后的targetlist数目不等,导致数据库宕机的情况。

21、【1023380】修复了由于改写SQL时忽略常量处理,导致在常量后加聚合函数嵌套报错的问题。

22、【1023112】修复了由于判断WHERE子句中是否包含ROWID表达式时,引用了空指针导致数据库宕机的情况。

23、【1022983】修复了不同用户创建同名dblink,使用vb_dump导出失败的问题。

24、【1022740】【1022738】修复了由于在plpgsql解析未加引号的dbms_lob.open时调用单独的解析函数,该函数中未正确处理参数带引号的情况,导致使用dbms_lob.open函数无法区分大小写变量的情况。

25、【1022668】由于视图会将查询语句的语法和语义的解析结果缓存到pg_rewrite系统表中,则当分区表的分区有外部依赖视图时,删除分区会引起视图缓存的解析结果的分区oid失效即视图失效的情况,这样则无法单独删除分区,在本次发布中修复了此问题。

26、【1021821】修复了在主备集群中,主机创建unlogged表,备机已经回放元数据但没有创建对应的数据文件,备机校验时发现数据文件不存在就会报错的情况。

27、【1021651】修复了由于汉化文件错误导致使用vb_ctl查看服务端模式错误的问题。

28、【1021650】修复了由于汉化文件错误导致copy命令被汉化的问题。

29、【1021153】修复了创建dblink指定的jarfile参数无效的问题。

30、【1021132】修复了在java中使用了setMaxRows,查询结束后没有释放表级锁,直到程序结束后才释放的问题。

31、【1019907】修复了由于RemoveTempNamespace函数逻辑问题,导致实例化数据库失败的问题。

32、【1019903】修复了由于pg_zhtrgm插件的操作是基于二元匹配,该匹配对应的gin索引效率低,导致模糊查询效果差且开启并行后性能未提升的情况。

33、【1019711】修复了由于race condition问题和对空指针处理不当造成宕机的问题。

34、【1019493】修复了vb_bulkload --help显示内容与实际支持情况不符的情况。

35、【1019331】修复了由于vb_bulkload工具不支持线程池模式,如果环境打开了线程池则会出现AddressSanitizer错误的情况。

36、【1019287】修复了由于使用裁剪、拼接变长类型的接口会重新申请内存,在传入lob过大时产生较大的内存使用峰值,导致dbms_lob.copy分配内存失败,数据库挂库的问题。

37、【1019091】修复了使用vb_bulkload导入时对于实际跳过的行无提示的情况。

38、【1018797】修复了由于dba_sequence视图的定义中cache_size字段未使用系统表字段值填充,而是直接使用null填充,导致dba_sequence不显示序列cache值的问题。

39、【1018713】修复了由于show命令的逻辑处理中,部分pgut_strdup函数拷贝的变量未进行释放,导致vb_probackup命令执行失败的情况。

40、【1018577】修复了vsql在异常退出的时候,没有释放申请的内存的问题。

41、【1018287】修复了prepare时产生的执行计划非最优计划的情况。

42、【1015869】修复了由于当enable_stmt_track和enable_resource_track参数同时开启(值为on)时,每条执行的SQL语句均会在TrackStmtContext内存上下文中拷贝一次,引起该上下文消耗内存持续增加,导致内存泄漏的问题。

行为变更

变更项 升级前 升级后
check_function_bodies参数 参数check_function_bodies关闭,创建package时会编译并检查依赖。 参数check_function_bodies关闭,创建package时不会编译,可以在真正执行函数时再检查依赖。
dbms_lob.open plpgsql不支持解析dbms_lob.open中带引号的参数。 plpgsql支持解析dbms_lob.open中带引号的参数。
有外部依赖视图的分区表 分区表有外部依赖视图的情况不允许单独删除分区。 分区表有外部依赖视图的情况允许单独删除分区。删除分区后,查询依赖该被删除分区的视图时:
  • 如果视图依赖分区表的分区,删除该分区后查询视图报错;
  • 如果视图依赖分区表的子分区,删除该子分区和分区后查询视图报错。
  • jdbc_fdw 使用jdbc_fdw时必须指定jarfile参数。 使用jdbc_fdw时可以不指定jarfile参数。
    行级锁的持有和释放 在autocommit开启时,java中使用setMaxRows后,查询结束后表级锁没有释放。 在autocommit开启时,java中使用了setMaxRows后,查询结束后会释放表级锁。
    pg_zhtrgm插件 pg_zhtrgm插件仅支持二元匹配操作。 添加pg_zhtrgm插件的三元匹配的操作,这些操作与二元匹配一一对应。如
  • 添加三元匹配的gin索引操作符gin_zhtrgm3_ops和gist索引操作符gist_zhtrgm3_ops;
  • 添加三元匹配操作函数similarity3和show_trgm3函数;
  • 添加三元匹配操作符<<->>和%%;
  • 说明:
    若Vastbase G100 V2.2 Build 10数据库使用VPatch工具从低版本升级至Patch No.7,该插件版本仍为1.0;若需将pg_zhtrgm插件版本升级至1.1,请使用升级方法介绍中的方法一或方法二进行数据库版本升级,升级后的插件版本即为1.1。