VastbaseG100

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

Menu

V2.2 Build 13

版本升级指南

版本号说明
例:V2.2 Build 13
大版本:2.2
Build:13
Patch:补丁号

1、不同大版本以及不同Build的升级必须使用方法一升级
2、补丁升级请遵循以下规则

升级前\升级后 V2.2 Build 13
<V2.2 Build 13 重新初始化
>=V2.2 Build 13 N/A

注:目前V2.2 Build 13内升级需要重新初始化的版本:暂无。

补丁编号说明

例:2-2.2-10-92-702-9104-kylin-v10sp1-x86-64-hygon-1.0.1-06-20230308.tar.gz

补丁编号规则:

TYPE-VERSION-BUILD-BGCORE-SMCORE-SVN-OSCPU-VPATCHNO-PATCHNO-DATE

编号规则 含义说明
TYPE 类型
One off patch,TYPE=1
PSU,TYPE=2
PSR,TYPE=3
VERSION 适用该补丁的Vastbase G100产品大版本号,如2.2。
BUILD 适用该补丁的Vastbase G100产品BUILD号,如8、9、10。
BGCORE 适用该补丁的Vastbase G100产品内核大版本号,如内核版本号为92.456,此时该值为92。
SMCORE 适用该补丁的Vastbase G100产品内核小版本号,如内核版本号为92.456,此时该值为456。
SVN 适用该补丁的Vastbase G100产品的内部SVN提交号。
OSCPU 标识操作系统和处理器。
VPATCHNO Vpatch版本号。
PATCHNO patch编号。
DATE 发布日期。

升级方法介绍

方法一: 以下简称为“重新初始化”

所有用户自定义的对象和数据都需要从旧库导出,再导入到新库。

1、使用vb_dump导出所有对象和数据。

2、使用数据库安装程序安装新的数据库。

3、开启数据库。

4、使用vb_restore导入步骤1中的备份数据到新库中。

方法二: 以下简称为“vpatch工具升级”

参考使用vpatch进行版本控制

方法三:以下简称为“替换升级”

直接替换安装目录并重启数据库即可,步骤如下:

1、 停止数据库。

2、 解压安装包,把bin、include、lib、share四个目录替换到数据库安装目录下。

具体操作步骤如下:

(1)解压安装包,第一次解压(安装包以实际为准)。

tar xf Vastbase-G100-installer-2.2_Build_5.161-openeuler_20.03-aarch64_kunpeng-20220812.tar.gz

(2)解压后进入vastbase-installer目录,进行第二次解压。

tar xf Vastbase-G100-2.2_Build_5.161-openeuler_20.03-aarch64_kunpeng.tar.gz

(3)第三次解压。

tar xf Vastbase-G100-2.2_Build_5.161-openeuler-64bit.tar.bz2

(4)将解压之后的bin、include、lib、share四个目录替换到现有数据库安装目录下。

3、开启数据库。

配套驱动/工具版本

JDBC Driver ODBC Driver HAS
V2.7 V1.4 V1.2/V1.4/V3.0

Vastbase G100 V2.2 Build 13

发布日期

2023年6月5日

新特性

1、支持在备库上执行vb_dump

2、支持资源池化主备共享存储特性,新增相关资源池化参数

3、基于存储池化、内存池化和计算池化实现Vastbase资源池化架构。

  • 存储池化支持企业高端存储、分布式存储等多种存储形态,实现一份数据服务多种计算,存储利用率提升50%以上;

  • 内存池化实现计算节点间内存的互联,通过同步事务信息和数据库缓存,实现多节点下的多版本快照一致性读能力,并结合RoCE硬件RDMA加速,实现极致的跨节点低时延高吞吐通信;

  • 计算池化支持多样化算力,通过shardingSphere构建Vastbase分布式计算能力,实现32节点>2100W tpmC;

  • 在集群管理上,基于双重心跳检测、共享盘仲裁、IO Fencing等技术实现集群节点故障自动检测、恢复和隔离,为资源池化提供一个高可靠的运行环境。

4、高性能:基础算子性能提升

扫描算子、聚集算子性能优化,实现TPC-H 100G数据量场景端到端性能提升37%.

  • Parser优化:优化Parser中关键字的搜索方法;

  • Inner Unique优化;

  • 谓词优化:通过谓词等价推理,获得新的下推谓词;

  • 扫描算子优化:对索引扫描、全表扫描算子做优化;

5、高安全:用户级别审计

  • 支持用户级别审计:新增GUC参数full_audit_users设置被审计用户列表,对列表中的用户执行的所有SQL语句记录审计日志。可以设置对管理员操作进行全量审计,做到对管理员访问用户数据进行审计;

  • 支持按客户端信息配置审计开关:新增GUC参数no_audit_client配置无需记录审计的客户端列表,对指定的客户端APP及IP不记录审计日志;

  • 支持对风险较高的系统函数调用记录审计日志:对风险较高的系统函数调用记录审计日志,支持记录审计的系统函数列表需在资料中明确。

6、单机模式下支持查询缓存功能,提升了同一个语句多次查询,且结果集相同时的性能。新增查询缓存函数

7、新增以下Oracle兼容性:

  • 新增以下系统视图:

    • ALL_ARGUMENTS:提供了当前用户可以访问的函数和过程的参数。

    • DBA_TAB_COLS:提供了关于数据库中所有表、视图的各列元数据信息。

    • DBA_POLICIES:提供了Vastbase G100支持的虚拟专用数据库(VPD)安全策略。

    • DBA_JOBS:提供了用户创建的定时任务的详细信息。

    • DBA_FREE_SPACE:描述了数据库中所有表空间的空闲区。

    • DBA_DATA_FILES:该视图记录了数据库文件。

  • 新增以下函数:

    • TO_LOB:该函数用于将LONG或LONG RAW类型的值转换成LOB值,只能应用于LONG或者LONG RAW列。

    • TO_BLOB:该函数用于将RAW或LONG RAW类型的值转换成BLOB值。

  • 新增对以下内置包的支持:

    • DBMS_AQ:用于添加消息到队列、从队列中删除消息、注册或注销PL/SQL回调存储过程。

    • DBMS_AQADM:提供了查询和设置会话相关状态的方法。

  • 新增以下内置包函数:

    • DBMS_LOB.WRITE:从BOLB(CLOB)开头的指定偏移量offset开始,将指定数量amount的数据写入BLOB(CLOB)中。

    • DBMS_LOB.APPEND:将源BLOB(CLOB)数据追加到目标BLOB(CLOB)数据后。

    • DBMS_JOB.SUBMIT:新增Oracle兼容模式下的特定语法,支持在传参时使用参数名=>参数值的写法。

    • DBMS_JOB.CHANGE:修改一个定时任务。

    • DBMS_RLS.ADD_POLICY新增支持package函数。

    • DBMS_SESSION.CLEAR_ALL_CONTEXT:用于清除当前命名空间即命名空间中的所有attribute-value值。

    • DBMS_SESSION.SET_CONTEXT:在用户自定义的命名空间下设置attribute-value值。

    • DBMS_UTILITY.FORMAT_ERROR_STACK函数:返回与当前错误(SQLCODE的返回值)所关联的错误堆栈。

    • DBMS_UTILITY.FORMAT_ERROR_BACKTRACE:用于显示异常引发点的调用堆栈。

    • DBMS_XSLPROCESSOR.SELECTNODES:从XML的DOM树中获取到指定的树节点列表。

    • UTL_ENCODE.BASE64_ENCODE:实现对RAW类型内容的加密,返回加密密文。

    • UTL_FILE.PUT_RAW:接受作为输入的RAW类型数值,并将该值写入输出缓冲区。

    • UTL_HTTP.READ_TEXT:根据请求url返回内容的字符集编码信息,解码并读取指定个数的字符存入指定的缓冲区中。

    • UTL_RAW.BIT_XOR:将输入的RAW r1和RAW r2中的值执行按位逻辑异或运算,并返回异或结果。

    • UTL_RAW.LENGTH:用于返回将输入的RAW r的字节长度。

    • UTL_RAW.SUBSTR:用于返回len个字节,从RAW r的pos位开始计算。

  • 新增CREATE CONTEXT语法,用于创建用户自定义的namespace。

  • 在使用SELECT DISTINCT | UNIQUE查询时ORDER BY子句中支持使用表达式

  • 支持在使用窗口聚集函数的条件下使用DISTINCT去重过滤,参见窗口函数支持distinct过滤

  • 使用ALTER TRIGGER语法时新增禁用和解禁触发器的语法。

  • JOIN连接允许表别名重复:支持使用JOIN连接从多个表中读取数据时,在JOIN条件两端使用重复的表别名。

  • 在进行SQL查询时,CONNECT BY支持ROWID在外层查询被识别

8、新增以下MySQL兼容性:

  • 支持在建表时使用列约束ON UPDATE特性,用于自动更新TIMESTAMP字段的时间戳,参考CREATE TABLE

  • CREATE VIEW创建视图时支持SQL SECURITY语法,为视图添加安全属性。

  • 支持GET DIAGNOSTICS语法,用于检查SQL语句执行填充到诊断区域的诊断信息。

  • 针对DATE、DATETIME和TIMESTAMP数据类型,支持无效日期作为数据,可以接受无效日期数据的INSERT和UPDATE操作,并且可以把无效日期作为查询的条件。

  • 新增字符处理函数ANY_VALUE:用于解决查询字段不属于GROUP BY字段的问题,当select的字段没有出现在GROUP BY子句中,可使用ANY_VALUE函数让语句正常执行。

  • 新增以下时间和日期处理函数:

    • DAYOFWEEK:用于获取某个日期是星期几。

    • DAYOFYEAR:用于获取某个日期是一年中的第几天。

    • FROM_UNIXTIME:用于将数值格式的时间戳转换为字符串类型的日期时间格式。

    • HOUR:用于提取并返回时间值中的小时部分。

    • WEEK:用于计算一个日期所在的周数。

    • WEEKOFYEAR:用于获取某个日期是一年中的第几周。

    • WEEKDAY:用于获取某个日期是一周中的星期几。

    • DAY&DAYOFMONTH:两个函数都是用于返回给定日期是当月中的第几天,两个函数用法,参数以及返回值均相同。

9、新增以下SQL Server兼容性:

  • 支持SELECT INTO语法:将SELECT在源表的查询结果用于创建一个新表。

  • 兼容SQL Server的DATETIME数据类型,该类型是结合了24小时制时间的日期,秒的精度为小数点后3位。

  • 兼容SQL Server的IMAGE数据类型,表示长度可变的二进制数据。

  • 支持字符操作符+=,用于对字符类型的用户自定义变量的连接和赋值操作。

  • 支持@var_name变量,用于临时存储一个带格式的值,可以查询值,也可以直接使用。

  • 支持@@var_name变量,但其不具备变量特性,实质上是一个系统函数。

  • 支持@@ERROR函数,可以针对错误处理捕获相应的错误号。

  • 支持ERROR_STATE函数,可用于返回导致TRY…CATCH构造的CATCH块运行的错误状态号。

  • 支持ERROR_SEVERITY函数,可用于返回导致TRY…CATCH构造的CATCH 块运行的错误的严重级别。

  • 支持ERROR_PROCEDURE函数,可以返回出现错误的存储过程或触发器的名称。

  • 支持ERROR_NUMBER函数,可以针对错误处理捕获相应的错误号。

  • 支持ERROR_MESSAGE函数,可以针对错误处理捕获相应错误的消息文本。

  • 支持ERROR_LINE函数,可以针对错误处理捕获相应的错误行。

  • 新增存储过程和匿名块支持返回多个结果集的功能。

10、新增以下PostgreSQL兼容性:

11、Vastbase G100 V2.2 Build 13版本相比于V2.2 Build 12,存在如下GUC参数的变更,详见GUC参数变更说明

  • 参数behavior_compat_options(数据库兼容性行为配置项)的取值范围新增了block_return_multi_results,表示存储过程和匿名块支持返回多个结果集。

  • 新增以下GUC参数:

    • hw_trans_enc_enable:是否开启硬件传输加密功能。

    • audit_hash_enabled:是否开启审计文件完整性校验功能。

    • enable_set_variable_mssql_format:用于控制在SQL Server兼容模式下是否支持自定义用户变量。

    • enable_global_result_cache:是否启用result_cache。

    • result_cache_mode:决定查询结果是否使用查询缓存。

    • result_cache_max_size:查询缓存所有缓存结果的总大小限制。

    • result_cache_max_result:单个缓存结果占用内存的最大百分比。

    • result_cache_max_rows:单个缓存的最大行数。

    • result_cache_max_tables:单个缓存涉及的最大表数量。

    • result_cache_whitelist:可以用于查询缓存的表oid的白名单。

    • full_audit_users:设置被审计用户列表。

    • no_audit_client:配置无需记录审计的客户端列表。

  • 移除以下GUC参数:

    use_crypto_card

12、新增平台适配情况如下:

数据库 CPU型号 操作系统
Vastbase G100 鲲鹏920 Kylin 2019
kylin V10(juniper)
kylin V10 sp3
麒麟信安 3.3
统信UOS V20(1021e)
openEuler 22.03 sp1
Intel x86 中标麒麟 7.6
Ubuntu Desktop 22.04
openEuler 22.03 sp1
kylin v10 sp3
openEuler 20.03 sp3
海光x86 kylin v10 sp3
CentOS 8.2
统信UOS 1050u2a
兆芯x86 Kylin V10 sp3
海光C86 openEuler 22.03
openEuler 22.03 sp1
龙芯5(LoongArch64) 统信UOS V20(1050u2a)
飞腾s2500 kylin V10 sp3
Vastbase Lite Intel x86 openEuler 22.03 sp1
Ubuntu 22.04.2 LTS(桌面版)

特性优化

  • 升级ltree插件,将ltree插件从1.0版本升级至1.2版本。
  • 升级pg_zhtrgm插件,将pg_zhtrgm插件从1.1升级至1.4版本。
  • SQL Server兼容模式下的DATETIME2类型的秒精度从小数点后6位变为7位。
  • 对于MySQL兼容模式下的数据类型:int,tinyint和bigint,支持int(N),tinyint(N),bigint(N)的写法。

使用限制

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

缺陷修复

1、【1027412】修复了对大数据量表执行UPDATE操作时,查看内存情况提示语法错误的问题。

2、【1027125】修复了MySQL兼容模式下,审计用户(audit_user)参数配置不生效的问题。

3、【1027063】修复了数据库开启并行后,执行了分布式版本专用的代码,导致执行计划出错引起数据库宕机的问题。

4、【1027049】修复了在非Oracle兼容模式下也能创建DBLINK的问题。

5、【1027022】修复了由于同义词新增的加密检查影响到了dblink,导致在dblink与synonym结合使用时,创建同义词报错提示schema does not exist

6、【1027014】修复了定长类型与变长类型进行比较时,若查询语句的绑定变量使用了空格变量,会导致查询无法返回正确结果的问题。

7、【1026986】修复了匿名块中调用dbms_job.run函数执行定时任务时发生数据库宕机的问题。

8、【1026962】修复了因字段类型长度过长的原因而触发数据库报错信息时,缺少对过长的报错信息进行截断的处理而引发的错误。

9、【1026816】MySQL兼容模式下视图大小写敏感,修复了因VPatch升级脚本中大小写的视图名混用,部分view名不识别,导致使用VPatch工具从V2.2 Build 10 Patch No.7升级到最新版时失败的问题。

10、【1026810】修复了因升级脚本语法错误导致V2.2 Build 10 Patch No.7使用临时补丁包升级失败的问题。

11、【1026803】修复了由于plpgsql在执行动态匿名块时获取传入的参数,将pbe的传入参数传给了动态匿名块,导致了宕机的问题。

12、【1026794】修复了创建包含start with…connect by…语法的物化视图时报错“ERROR: invalid varno 4”的问题。

13、【1026744】修复了由于将索引失效操作归纳为了会令缓存失效的操作,导致生成查询缓存后,使用 MODIFY PARTITION partition_name UNUSABLE LOCAL INDEXES将本地分区索引设置失效,再次执行查询时执行计划中的最顶层算子为Enter的问题。

14、【1026700】修复了数据库报错信息xxx is only supported in datebase which dbcompatibility=''.中database一词存在拼写错误的问题。

15、【1026685】修复了因高速导入导出功能和GUC参数enable_default_ustore_table存在冲突,导致执行vb_ttrestore命令后数据库宕机的问题。

16、【1026644】修复了当max_stack_depth设置过大时,申请内存方式不合理引起栈内存空间溢出,导致数据库宕机的问题。

17、【1026642】修复了在k8s中安装Vastbase G100后,配置dcs时缺少映射端口的问题。

18、【1026599】修复了由于DeleteStmt的relation属性被relations属性替代,但是在DELETE PLAN_TABLE时依然使用relation属性,导致使用空指针,从而引起数据库宕机的问题。

19、【1026544】修复了由于SQL Server兼容模式下未合入多表联合更新和多表联合删除的语法,导致在该兼容模式下进行表的DELETE或UPDATE操作时,where子句中使用convert函数时数据库宕机的问题。

20、【1026531】在create or replace package + create or replace package body时,package内的function的oid会发生变化,而view中的oid仍然为原来的oid,导致在pg_get_viewdef时报错,修复了因此导致使用vb_dump备份出错的问题。

21、【1026401】修复了删除数据库时,没有删除该库下的全密态密钥,导致再次创建时失败,删除时提示没有密钥,创建时提示已有同名密钥的问题。

22、【1026388】修复了gs_guc set的方式设置enable_global_result_cache的值,出现报错的问题。

23、【1026375】修复了表上存在触发器时,进行多表联合更新时结果有误的问题。

24、【1026368】修复了由于时区问题导致unix_timestamp函数计算结果有误的问题。

25、【1026235】当设置了GUC参数uppercase_attribute_name=on时,使得select结果集的列名变成大写,而vb_dump在执行某些select后,调用PQfnumber时,会自动把待查找的列名转为小写,修复了因以上问题导致使用vb_dump进行导出时产生core dump文件的问题。

26、【1026156】修复了表上存在序列时,UPDATE更新表数据时存在内存泄露的问题。

27、【1026133】修复了因对cidr类型的限制范围有误导致将合理的cidr类型数据插入表时失败的问题。

28、【1026129】修复了因所有兼容模式下都允许入参和列名相同,导致在MySQL兼容模式下调用存储过程逻辑判断出错的问题。

29、【1026124】修复了由于缺少对pg_cbm_tracked_location函数返回空字符串的校验,因此返回空字符串后引起securec_check_for_sscanf_s检查失败,导致vb_probackup增量备份失败的问题。

30、【1026027】修复了因缺少convert函数的相关代码导致执行select convert()时返回列名显示为convert_coding的问题。

31、【1026020】修复了在V2.2 Build 10的debug版本中通过dbms_job.run函数向表中插入数据,命令执行成功,但表中没有数据的问题。

32、【1025899】修复了关闭GUC参数enable_global_syscache时,使用VPatch工具带对象升级后,数据库无法使用的问题。

33、【1025753】修复了使用pg_xlogdump解析wal日志失败,提示堆溢出的问题。

34、【1025751】修复了由于plpython在多线程架构下的实现逻辑缺陷,导致xmldom包在并发环境下解析结果有误的问题。

35、【1025719】修复了使用同样的查询语句在不同并行度的前提下进行查询时返回结果不一致的问题。

36、【1025684】修复了在Oracle兼容模式下,原本在处理占位符时需要根据位置以及名称来判断,导致同名占位符绑定的参数是同一个,同名占位符取值相同的问题。

37、【1025625】修复了由于不支持pldebugger/pldbgapi插件,但未禁止编译使用,导致创建pldbgapi插件时报错的问题。

38、【1025513】普通函数调用时,编译时遇到伪类型则会根据外层调用的信息识别真正需要的类型。修复了由于包内函数编译时,没有保存外层调用的信息,导致伪类型解析失败,原参数类型识别失败,无法输出正确结果的问题。

39、【1025393】修复了使用vb_dump导出后的SQL文件中,存在写在前面的对象依赖于后面创建的对象的情况,导致进行恢复时大量报错WARNING: could not resolve dependency loop among these items的问题。

40、【1025376】修复了由于汉化问题导致自治事务的共享内存满时,执行自治事务存储过程的bgworker无法正常停止,进而导致数据库宕机的问题。

41、【1025374】修复了由于DBMS_XMLDOM.getnodetype函数未进行空值判断导致调用该函数时出现报错的问题。

42、【1025330】修复了因vb_dump缺少对MySQL兼容模式下大小写敏感的处理逻辑,导致大写的别名在使用vb_dump导出后变为小写的问题。

43、【1025219】修复了线程池模式下,在MySQL兼容模式的库中执行插入大量带有partial cluster key的列存表后,引起数据库宕机的问题。

44、【1025182】修复了调用函数gs_xlogdump_parsepage_tablepath时,表存在但是提示找不到表文件的问题。

45、【1025078】修复了由于缺少函数的兼容性判断,导致在Teradata、PG、SQL Server兼容模式下,使用dbms_lob中的相关函数未报错的问题。

46、【1025045】修复了部分数据库版本中缺少用于控制VPD功能的GUC参数oracle_vpd_enabled的问题。

47、【1025037】修复了has1.2健康集群状态下,集群运行时网络、时间均正常,但查看集群has和数据库日志时显示各节点心跳连接异常的问题。

48、【1025023】修复了在配置文件postgresql.conf中为max_process_memory和session_statistics_memory(session_history_memory)重复配置了不相同值时,系统不能够准确识别参数最终有效配置,导致数据库启动失败的问题。

49、【1025018】修复了创建时序表时(即orientation=timeseries),需要开启时序开关enable_tsdb,但在非分布式场景下没有参数enable_tsdb,导致创建时序表时使用了错误的orientation但报错提示信息不合理的问题。

50、【1025008】修复了使用段页式存储函数gs_space_shrink时,若入参extent_type的取值超出范围时报错信息不合理的问题。

51、【1024988】修复了MySQL兼容模式下,当用户变量和列名冲突时优先取列名,导致执行loop相关操作时引发数据库宕机的问题。

52、【1024980】修复了由于数据库在Oracle兼容模式下将numeric转成字符串时有尾端去0的逻辑,影响到了to_char函数,导致执行select to_char时返回结果与Oracle不一致的问题。

53、【1024971】修复了进行表联合查询时报错“could not find hash function for hash operator 8873”的问题。

54、【1024945】修复了调用pg_stat_segment_extent_usage时输入forknum为4时导致数据库宕机的问题。

55、【1024929】修复了审计日志加密的get_audit_encrypt_info函数中,PANIC退出时未释放已申请的局部变量内存,容易引起内存泄露的问题。

56、【1024924】修复了进行存储数据完整性校验时query_kms_type函数调用次数过多的问题。

57、【1024897】修复了手动编译,configure不开启–enable-encrypt-kms时编译报错的问题。

58、【1024891】修复了由于数据库开启汉化时,“Failed on request of size %lu bytes under queryid %lu in %s:%d.”对应的翻译中参数的顺序错乱导致数据库宕机的问题。

59、【1024876】修复了打开参数plsql_show_all_error后,DBE_PLDEVELOPER.gs_errors和DBE_PLDEVELOPER.gs_source没有记录相关的错误信息的问题。

60、【1024863】修复了explain analyze查看层次查询的执行计划时数据库宕机的问题。

61、【1024840】修复了由于strdup函数申请的内存未及时释放,导致使用pg_xlogdump工具查看xlog日志时发生内存泄漏的问题。

62、【1024830】修复了MySQL兼容模式下,创建存储过程声明与注释符冲突时,调用存储过程时导致数据库宕机的问题。

63、【1024829】修复了使用JDBC连接数据库并执行递归查询语法时数据库宕机的问题。

64、【1024772】修复了由于汉化后参数翻译出现重复和错位,导致vb_dump --help中存在重复参数的问题。

65、【1024731】修复了使用JDBC连接数据库并调用包中的存储过程时数据库宕机的问题。

修复了MySQL兼容模式下,建表时为CLOB类型字段指定COLLATE,查询带空格的值时返回结果错误的问题。

66、【1024722】修复了MySQL兼容模式中,开启了大小写敏感特性时会对表名做小写处理,若创建了大写表名则show create table时报错提示表不存在的问题。

67、【1024711】修复了数据库进行类型转换时会将类型为unknown的情况转换为第一个变量类型,导致在MySQL兼容模式下使用IFNULL函数时返回结果与MySQL不一致的问题。

68、【1024663】修复了在创建存储过程中使用exit handler for exception,调用存储过程后导致数据库宕机的问题。

69、【1024651】修复了由于内核安装包缺失postgis3.2编译的头文件、raster_hash函数的参数类型不匹配,导致在postgis320中执行create extension postgis_raster创建扩展失败,数据库宕机的问题。

70、【1024650】修复了使用vb_dump导出表时,若表字段中含自增属性,则导出的SQL中先update了pg_attribute表致使后续alter table、alter column失败,导致进行导入恢复时报错提示“tuple already updated by self”的问题。

71、【1024642】修复了由于游标创建的执行计划没有与type形成依赖,导致在type改变后继续执行旧的执行计划时数据库宕机的问题。

72、【1024641】修复了调用函数的返回值是record类型时,在进行变量处理后record类型字段与返回值变量类型不匹配,导致数据库宕机的问题。

73、【1024603】修复了dblink在除了Oracle兼容模式以外的数据库内可以成功创建的问题。

74、【1024594】修复了数据库配置文件postgresql.conf中listen_addresses未正确换行导致JDBC无法远程连接至数据库的问题。

75、【1024592】修复了由于非Oracle兼容模式下,缺少对于gs_sm3入参为空的判断,导致入参为空时未返回null的问题。

76、【1024581】修复了非Oracle兼容模式下,不能使用ora_hash作为别名的问题。

77、【1024580】修复了vb_dump/vb_restore使用参数–no-tablespaces,针对索引信息未生效的问题。

78、【1024579】修复了在其他兼容模式下select ora_hash('');的返回结果与Oracle兼容模式下不同的问题。

79、【1024571】修复了匿名块定义package中类型,类型默认值为包内常量时,匿名块多次执行后数据库宕机的问题。

80、【1024552】修复了非Oracle兼容模式下调用DBMS_SESSION的子程序时报错信息不合理的问题。

81、【1024538】修复了在自定义模式下创建package,package中包含record类型的前提下,使用vb_dump导出模式后,使用\i命令进行导入时报错的问题。

82、【1024537】修复了由于获取物化视图对象时未考虑同义词的场景,导致为物化视图创建同义词,能够成功create、select但refresh失败的问题。

83、【1024528】修复了使用vb_dump导出时包含了plpython3u插件中的utl_tcp package,导致在备份数据库中创建plpython3u时报错的问题。

84、【1024514】修复了在使用uuid-ossp插件时,由于无法保证缓存对象的生命周期与会话生命周期的一致导致的内存泄漏问题。

85、【1024506】修复了使用create force view语句创建无基表的视图后,无法对该视图执行alter…rename操作的问题。

86、【1024460】修复了在数据库中可以CREATE LANGUAGE创建过程语言的问题。

87、【1024441】修复了使用create or replace语句创建视图并指定其definer为无public权限的用户时,能够成功创建视图的问题。

88、【1024433】修复了在MySQL兼容模式下使用declare exit handler for sqlexception进行异常处理时,带有LOOP循环的异常处理报错的问题。

89、【1024387】修复了由于hashjoin计算式会使用HashCell结构体的collations属性获取collation信息,但获取HashCell的HashSource没有考虑FileHashSource,导致没有初始化HashCell的collations信息,数据库宕机的情况。

90、【1024354】修复了使用JDBC连接数据库并匿名传入null时引起数据库宕机的问题。

91、【1024343】修复了代码中存在可能引用空指针导致异常的问题。

92、【1024339】修复了在package中调用其他schema下package中的变量时报错:”xxx” is not a known variable的问题。

93、【1024329】修复了由于在线程池模式下,创建worker线程时不创建会话u_sess,但当在报错打印日志时,未判断u_sess是否合法,就直接使用了u_sess的成员变量,则导致数据库宕机的问题。

94、【1024327】修复了基表不存在时,使用create or replace force view语法创建视图后,调用DBMS_METADATA.GET_DDL查询DDL时结果有误的问题。

95、【1024325】修复了由于pg_stat_get_mem_mkbytes_reserved函数访问了已经释放线程字段,导致Vastbase Lite数据库宕机的问题。

96、【1024249】修复了由于在删除package时会删除与其有依赖关系的程序,但此程序的父程序没有对package的依赖则保留,赋值时如果是子程序场景,则会切换到变量的上下文,但此上下文已被清理,则导致通过子程序调用package内变量时出现挂库的情况。

97、【1024242】关联数组变量作为函数出参,修复了若函数没有对其赋值,会将null赋给关联数组,导致调用集合函数时报错集合未初始化的问题。

98、【1024230】修复了由于无法解析传入参数bigint,导致设置字符处理函数regexp_substr的入参传入rownum,出现报错无法执行的问题。

99、【1024207】修复了plpython嵌套调用时,plpy.prepare的结果放在SD中,然后执行execute时报错的问题。

100、【1024198】修复了由于休眠时间计算偏差,导致使用 dbms_lock.sleep() 存储过程可以中止会话一段时间,中止60s后输出当前时间无变化的问题。

101、【1024166】修复了由于语义分析时没有设置正确的rangetableentry,导致connect by查询中含相关子查询,报错提示无法找到列的问题。

102、【1024148】修复了执行insert all into命令导致数据库宕机的情况。

103、【1024133】修复了由于当路径是null时未进行过滤,直接输出null,导致sys_connect_by_path中的列含有null时结果错误的问题。

104、【1024127】修复了由于当路径是null时未进行过滤,直接输出null,导致sys_connect_by_path中参数使用||拼接时,无法识别且有报错提示的问题。

105、【1024113】修复了由于判断逃逸字符的长度时没有考虑字符由多字节组成,导致当逃逸字符为汉字时报错提示逃逸字符无效。

106、【1024057】修复了由于record_in中缺少对plpython带typemod的调用的处理,导致执行函数中python返回字符串的语句时,数据库宕机的问题。

107、【1024051】修复了grant语法不支持current_role关键字的问题。

108、【1023992】修复了由于在对dbms_sql_parse进行语句解析时,未对解析树进行判空处理,则导致访问空指针,数据库宕机的问题。

109、【1023975】由于创建函数proisprivate属性默认为false,导致外部可以访问私有函数的问题。

110、【1023949】修复了由于谓词下推、子查询优化了orderby,导致使用select@i方式赋值查询case语句与源库执行结果不一致的问题。

111、【1023888】修复了数据库对MySQL兼容模式下库中关联主键作为外键的行为与MySQL不一致的问题。

112、【1023876】修复了由于plsql_show_all_error打开后打印等级由ERROR降级为NOTICE,导致往下执行时未初始化变量,数据库宕机的问题。

113、【1023847】修复了由于存在对vbadmin角色的权限检查,则在copy时禁止了vbadmin角色操作,导致先开启三权分立,设置敏感标记后关闭三权分立,vbadmin角色使用copy导出报错的问题。

114、【1023827】修复了由于通过hostname访问远程节点,获取端口号异常则无法修复损坏的page,导致主节点数据文件损坏后执行对应表sql,报错提示备机读取失败的问题。

115、【1023822】修复了配置GUC参数enable_global_plancache为on,且local_syscache_threshold设置值小于16MB时,日志中会循环不间断打印告警信息的问题。

116、【1023767】修复了由于函数编译新增加了check function body 参数设置为true,即表示创建函数时不编译函数,调用时才编译,但子函数对父函数依赖,调用子函数时编译未通过导致首次执行命令出错,再次执行才能成功的问题。

117、【1023759】修复了使用vb_bulkload导入日期格式时丢失微秒部分的问题。

118、【1023692】修复了Intel平台的KylinV7系统下偶发因内存访问越界导致数据库宕机的问题。

119、【1023690】修复了由于代码缺陷导致飞腾平台uos1020a系统下数据库偶现空指针异常,引发数据库宕机的问题。

120、【1023656】修复了因print_strict_params参数限制,导致在plpgsql中执行select…into strict…查询结果为空时未报错的问题。

121、【1023606】修复了由于缓冲区中确实已经缓存了相应列存的只读缓存CU,事务回滚后列存的只读缓存CU仍然在缓冲区中,当第二个事务创建列并再次查询时,可以用相同的tag找到第一个事务的CU,但是CU的magic是旧事务的事务id,因此在随后的校验中失败,产生宕机或报错的问题。

122、【1023598】修复了由于vbtrace工具未汉化,导致执行vbtrace --help,提示信息依然为英文的问题。

123、【1023588】修复了由于备份恢复后触发器definer信息丢失,导致出现了在触发器中指定definer,备份恢复后,在备份数据库剥夺用户表的权限,本应触发失败却触发成功了的情况。

124、【1023581】修复了部分数据库版本下进行TPC-H时耗时过久,性能异常的问题。

125、【1023465】修复了因参数uppercase_attribute_name设为on,导致使用vb_dump进行导出时检测到非法内存错误的问题。

126、【1023430】修复了在开启线程池模式且开启SSL时,由于未能合理释放内存导致内存泄漏的问题。

127、【1023279】修复了由于SendCompressedFile函数会用mmap将压缩文件映射到内存,若在此期间该文件被裁剪导致访问到没有对应文件的mmap内存区域,数据库进程将会收到SIGBUS信号从而coredump的问题。

128、【1023216】修复了由于缺少类型转换导致SQLXML类型无法转换成varbinary类型插入数据库的问题。

129、【1023215】【1023213】【1023212】【1023211】【1023209】【1023210】修复了由于缺少类型转换,导致varbinary类型,无法通过Preparestatement.setByte、preparestatement.SetBlob、Preparestatement.setBytes、Preparestatement.setFloat、preparestatement.setBooean、Preparestatement.setLong传值的问题。

130、【1023214】修复了由于varbinary转numeric有问题,导致varbinary类型使用preparestatement.setBigDecimal传参更新数据失败的问题。

131、【1023075】修复了由于不支持uuid和text的类型转换,导致插入数据隐式类型转换失败的问题。

132、【1023067】修复了由于不支持uuid和varchar的类型转换,导致uniqueidentifier类型无法通过setString传值的问题。

133、【1022995】修复了数据库在加载参数配置文件时,会逐个对参数值进行有效性判断的问题。

134、【1022978】修复了由于replace package body命令将函数删除,导致通过pg_views查看视图时函数缓存失效的问题。

135、【1022963】修复了MySQL兼容模式下,无法调用其他模式下创建的包含大小写的函数问题。

136、【1022793】修复了由于max_connections配置过大(200000)时,内存不够,启动数据库时core dump的问题。

137、【1022729】修复了JDBC连接数据库,STR_TO_DATE函数传参为空串时报错“cache lookup failed for type 0”的问题。

138、【1022697】创建dbms_job使用自治事务,重复起库停库出现了job worker线程已经退出,消息没有消费,bg worker线程等待消息回复,主线程等待bg worker退出的情况,即导致了死锁,主线程一直处于backend状态的情况,所以出现停库失败的问题,本版本中修复了此问题。

139、【1022221】由于在vb_dump导出后的sql中,procedure与package的顺序相反,当procedure中使用到了package定义的type,但导出后的sql中package在procedure后,因此导致导入备用库时出现报错。本版本中修复了此问题。

140、【1022203】修复了由于tuple可见性机制引起更新失败,导致当表中存在唯一性约束时,replace into命令同时插入多行时出现报错报错的问题。

141、【1022092】修复了当配置参数enable_default_ustore_table=on,ustore_attr='enable_ustore_partial_seqscan=true'时,运行update操作时引起数据库宕机的问题。

142、【1022052】修复了由于创建线程时未设置线程名,stats获取线程时间逻辑有误,导致查询系统视图pg_os_threads、thread_name和creation_time存在为空的字段。

143、【1021803】修复了由于在处理insert防篡改数据时,写入全局索引时tableoid为0,导致当在查询用到全局索引时报错提示tableoid为0的问题。

144、【1021757】修复了由于列存创建 cudesc 表时,在分区表场景没有创建依赖,导致可以直接删除分区的delte、cudesc表的问题。

145、【1021738】修复了CentOS 7 x86、openEuler 20.03 aarch64没有构建出包的问题。

146、【1021723】修复了在计算indexpath代价时通过判断enable_indexscan来进行disable indexpath,由于没有区分是indexscan和indexonlyscan,导致了在禁用indexscan时会同步把indexonlyscan也禁用的问题。

147、【1021710】修复了由于宽度优先的方法中cycle检查逻辑有误,导致进行层级查询select...connect by nocycle...order siblings by...时返回结果错误的问题。

148、【1020923】修复了由于改写输出列时,未考虑条件表达式作为参数输入,导致了pivot里聚集函数中嵌套条件表达式时报错的情况。

149、【1020215】修复了由于未将not null约束传递,且未给变量赋值导致record类型中定义的not null约束未生效的问题。

150、【1018059】修复了数据库开启汉化后,部分异常场景下的报错信息未做汉化处理的问题。

151、【1017915】修复了由于使用pqconnectdb时没有设置超时时间,但不允许中断,导致的无法重启、关闭数据库的问题。

152、【1017093】修复了由于视图中无NOT NULL约束导致的列缺失的情况。

153、【1012155】修复了由于代价公式缺陷导致query_dop开启走了全表扫描的问题。

154、【1008974】修复了在Oracle兼容模式下,由于DBMS_JOB包中的run函数判断原子性时报错,导致不能 commit和rollback的问题。

155、【1027016】修复了使用prepare、execute执行DBMS_JOB.RUN语句后数据库宕机的问题。

156、【1026190】修复了由于执行call dbms_session.modify_package_state(2)后,内存直接释放,导致package执行效率变慢的问题。

157、【1024591】【1024381】修复了由于代码逻辑问题导致报错检测到非法内存错误或Segmentation fault,导致数据库宕机的问题。

158、【1023976】修复了由于优化器错误的过滤合法路径,且代价公式不准确,导致query_dop=12的查询时间为query_dop=1查询时间的11.5倍的问题。

159、【1018568】修复了由于函数返回类型为数组,导致使用extract函数提取标签时,返回值的数据类型与Oracle不一致的问题。

160、【1017974】修复了由于Memalloc 在系统无法分配出可用内存,导致数据库宕机的问题。

161、【1024725】修复了MySQL兼容模式下,建表时为CLOB类型字段指定COLLATE,查询带空格的值时返回结果错误的问题。

162、【1026779】修复了由于缺少控制switchover返回状态未知的超时时间的参数导致k8s内has切换超时导致VEM获取switchover状态异常的问题。

163、【1025220】修复了由于遍历链表时的内存申请机制不合理,导致数据库创建超过2000个会话连接时会报错内存不可用的问题。

164、【1023110】修复了执行analyze操作报错无法分配内存invalid memory alloc request size的问题。

165、【1026329】修复了数据库报错heap-use-after-free in ChooseIntervalTablespace(RelationData*),数据库宕机的问题。

166、【1025631】修复了MySQL兼容模式下执行order by语句耗时过长的问题。

167、【1014567】修复了开启enable_stmt_track的情况下执行大量insert操作时引发操作系统oom的问题。

168、【1014284】修复了由于代码缺陷导致V2.2 Build 9高性能版使用时报无法分配内存的问题。

行为变更说明

变更项 升级前 升级后
pldebugger/pldbgapi插件 支持使用pldebugger/pldbgapi插件。 不支持使用pldebugger/pldbgapi插件。
pg_stat_segment_extent_usage
  • pg_stat_segment_extent_usage的forknum参数取值为3或4时宕机。
  • pg_stat_segment_extent_usage的extent_type取值范围为[1,4]。
  • pg_stat_segment_extent_usage的forknum参数取值为3或4时报错不支持。
  • pg_stat_segment_extent_usage的extent_type取值范围为[1,5] 。
  • DBE_PLDEVELOPER.gs_source
  • 打开plsql_show_all_error,会将成功或失败的信息记录到gs_source。
  • 关闭plsql_show_all_error,只将正确编译信息记录到gs_source。
  • 无论plsql_show_all_error打开或关闭,gs_source均会记录编译成功或失败的信息。
    create language 允许直接通过create language创建过程语言。 不支持直接通过create language语句创建过程语言,只能在插件脚本中使用该语句创建过程语言,并且只支持plpython3u和plpgsql两种语言。
    逃逸字符是否支持多字节字符 逃逸字符不支持多字节字符。 逃逸字符支持多字节字符。
    replace replace同时插入多行时出现报错。 replace同时插入多行时可以更新。
    GUC参数 - 新增GUC参数enable_seqscan_dopcost。
  • enable_seqscan_dopcost = on(默认值),表示按并行度计算SeqScan的I/O代价。
  • enable_seqscan_dopcost = off时,优化器不再按并行度计算 SeqScan的I/O代价
  • VPD功能无参数控制 新增GUC参数oracle_vpd_enabled控制oracle_vpd功能。
  • oracle_vpd_enabled=off(默认值)表示Oracle兼容模式下的VPD功能不可用。
  • oracle_vpd_enabled=true表示Oracle兼容模式下的VPD功能可用。
  • local_syscache_threshold参数取值:
    配置enable_global_plancache=on时,local_syscache_threshold设置的值可以小于16MB。
    local_syscache_threshold参数取值:
    配置enable_global_plancache=on时,local_syscache_threshold设置的值不能小于16MB,否则数据库无法启动或者在已经启动时设置值失败。
    sql_compatibility默认值为B_FORMAT,initdb初始化数据库时使用B_FORMAT模式初始化数据库。 sql_compatibility默认值为A_FORMAT,iinitdb初始化数据库时使用A_FORMAT模式初始化数据库。
    定长与变长类型比较行为 没有跨类型操作符时,定长与变长的比较会转换为定长与定长或变长与变长的比较。 新增bpchar op text操作符,定长与变长比较可以为:
  • 如果是=!=,先判断两者实际长度,如果长度不等,则直接返回false或true;如果长度相等,再进行内存比较。
  • 如果是<,<=,>,>=,则根据实际长度进行字符串比较。
  • max函数对cidr类型数据的检测范围 max函数检测cidr类型数据,当大于等于32时报错。 max函数检测cidr类型数据,当大于32时报错。
    占位符 Oracle兼容模式下处理占位符时,根据位置和名称判断占位符。 Oracle兼容模式下处理占位符时,取消占位符名称的比较,动态SQL中同名占位符按照位置传参。