2024年10月至2025年3月

更新时间:2025-03-28 10:22:39

在云原生数据库PolarDB PostgreSQL版(兼容Oracle) 2.0版本(以下简称PolarDB)202410月至20253月的开发周期中,针对兼容性、迁移能力以及驱动工具等多个方面实现了显著提升。本文将简要总结PolarDB在本开发周期内各个领域的进展和改进。

image

更新日志

内核兼容性提升

以下仅为内核兼容性提升,详细的内核版本更新记录请参考PolarDB PostgreSQL版(兼容Oracle)2.0版本更新说明

  • 内置类型

    • 新增JSON_ELEMENT_T、JSON_OBJECT_T、JSON_ARRAY_T类型支持,增强JSON数据处理的灵活性,支持更复杂的JSON操作场景。

    • 支持XmlTypeextractgetStringVal函数,扩展XML数据处理能力,便于高效提取和操作XML数据中的目标内容。

    • 2.0.14.13.27.0及以上内核小版本,支持INT2INT4INT8类型的除法结果都为浮点数,提升数值计算与Oracle行为兼容性。

    • 支持standard_hash等若干内置函数、ROLE_ROLE_PRIVS等若干视图,增强函数和视图的功能覆盖范围。

    • 支持ROW类型NULL/NOT NULL约束校验,增强与Oracle兼容性,确保数据完整性检查的一致性。

    • 支持ODCI类型,扩展类型支持的应用场景,便于与Oracle系统的集成。

    • 支持复合类型与带默认值的record类型的转换,扩展了类型转换的功能,便于处理复杂数据结构。

    • 修复DATE类型在JSON/XML中丢失时分秒精度的问题。

    • 修复数字类型长度计算错误导致的数据异常。

    • 修复复合类型与record转换异常问题,增强类型转换稳定性。

  • 内置视图

    • 支持DBA_COL_COMMENTS视图,用于查看和管理列注释信息。

    • 支持nls参数视图,扩展国际化参数的支持,增强多语言配置管理。

    • 支持全参数的DBA_TAB_COLUMNS视图,提供更全面的表列信息。

    • 支持SESSION_ROLE内置视图,扩展会话角色管理的功能,便于查看和调整会话角色。

    • 支持USER_TAB_PARTITIONS视图HIGH_VALUE字段,优化分区表高值管理。

    • 支持DBA_OBJECTS视图CREATED字段,用于查看对象的创建时间。

    • 修复DBMS_SESSION内置视图权限问题,提升视图使用的安全性。

  • SQL语法

    • 支持在> =符号之间增加空格,提升SQL语法灵活性和编写便利性。

    • 支持SELECT FOR UPDATE ORDER BY,扩展锁机制适用场景,保证数据顺序更新。

    • 支持在视图和表中使用EDITIONABLE关键字,扩展版本管理能力,便于管理多版本对象。

    • 支持ROWNUM带引号状态下的调用,提升与Oracle的兼容性,确保SQL语法灵活性。

    • 支持带引号的USER函数使用,便于处理大小写敏感的场景。

    • 支持TEXT类型和其他类型进行UNION操作,便于处理不同类型的数据合并。

    • 支持函数在调用时嵌套多层括号,便于处理复杂的函数调用逻辑。

    • 支持在合法的场景下FROM LIST中出现多个同名的别名,便于处理复杂的查询逻辑。

    • 支持+操作符的高级场景应用,便于处理复杂的数值计算。

    • 支持使用inner关键字作为别名,增强SQL语法灵活性,便于处理复杂的查询逻辑。

    • 支持使用extractget关键字作为函数名,便于处理与Oracle兼容的函数调用。

    • 支持TYPE BODY使用集合方法,扩展类型操作,简化复杂数据结构处理。

    • 支持函数返回值嵌套集合的下标访问,提升数据操作能力并简化复杂处理。

    • 支持SELECT跨列ORDER BY语法,提升SQL语法灵活性,简化复杂排序逻辑。

    • 支持By Default on NULL默认导出逻辑,增强NULL兼容性并匹配Oracle行为。

    • 支持子查询ROWID访问,便于处理复杂的查询逻辑。

    • 支持MERGE INTO子查询,增强数据合并操作灵活性,便于处理复杂的数据更新逻辑。

    • 支持POSITION/CAST/DECODE等关键字转为非保留关键字,提升SQL语法兼容性。

    • 支持类型继承,扩展数据类型系统,便于处理复杂的数据结构。

    • 支持大小写交替时默认小写,便于处理大小写敏感的SQL语句。

    • 修复嵌套聚合函数的Crash问题,提升系统稳定性。

    • 修复dblink插件未处理rowid列的问题,提升伪列处理的兼容性。

  • 函数计算

    • 新增JSON_OBJECT、JSON_ARRAYAGG函数,优化JSON数据处理。

    • XMLELEMENT、XMLAGG返回XmlType类型,便于生成和操作XML数据。

    • 支持XMLELEMENT、XMLAGG使用.function调用,提升XML复合操作灵活性。

    • 支持CONVERT(date,name,name)NVL(interval, interval)内置函数,用于处理日期和间隔类型的数据。

    • 支持各种常见类型的+一元操作符,提升数值计算操作符兼容性。

    • 修复TO_DATE/TO_CHAR函数syyyy格式错误问题,保证日期处理准确性,与Oracle行为保持一致。

    • 修复函数公共同义词和函数的调用优先级错误的问题,确保函数调用的正确性。

    • 支持函数OUT参数时嵌套隐式类型转换,便于处理复杂的函数调用逻辑。

    • extract/extractValue/existsNode函数参数值与返回值兼容,提升函数调用兼容性。

    • 扩展XMLSEQUENCE函数XML数据处理能力,支持从XML中提取序列数据。

    • 支持USERENV函数管理会话环境信息,便于获取会话相关的信息。

    • 修复TO_DATE函数报错逻辑,与Oracle行为保持一致。

    • 修复DECODE表达式,增强表达式处理的稳定性。

    • 支持NAMEVARCHAR类型的隐式转换,便于处理复杂的数据结构。

    • 支持wmsys.wm_concat函数,增强字符串拼接的功能。

    • 支持函数输入更多参数,提升复杂业务逻辑处理能力。

    • 支持NVL函数处理更多类型,便于处理复杂的数据操作。

  • DDL

    • 支持ALTER SESSION ENABLE语法,用于控制会话的行为。

    • 支持创建表时生成列语法以及部分特殊的关键字,便于处理复杂的表结构。

    • 支持MONITORING关键字,用于跟踪表的使用情况,增强数据行为分析能力。

    • 支持ALTER TYPE ADD(ATTRIBUTE)语法,增强对象类型管理的灵活性。

    • 支持REFRESH COMPLETE语法,用于更新物化视图数据简化数据更新流程。

    • 支持/操作符单独调用,以修复DTS迁移中的报错问题。

    • 支持WITHCHECK OPTION强制视图约束,保障数据写入完整性。

    • 支持手动创建物化视图的循环依赖,扩展物化视图管理的功能,便于处理复杂的物化视图依赖关系。

    • 支持DROP FORCE强制删除同义词,便于处理复杂的同义词依赖关系。

    • 支持ALTER TYPE ADD FUNCTION语法,扩展类型管理的功能。

    • 支持CREATE TABLE CACHE语法优化数据缓冲策略,优化表的性能。

    • 支持ALTER TYPE ADD/DROP多列,便于处理复杂的数据结构。

    • 系统触发器支持ALTER TRIGGER ENABLE/DISABLE语法,增强触发逻辑动态管理。

  • 其他

    • 支持pg_cron时区自定义修改,便于处理不同时区的定时任务。

    • 支持Oracle形式注释,提升与Oracle兼容性。

PL/SQL

  • 内置包

    • 支持UTL_URL内置包,提供转换URL中的非法字符和保留字符的方法。

    • 支持UTL_TCP内置包,强化TCP通信功能,扩展网络传输场景。

    • 支持UTL_HTTP内置包,拓展Web交互功能。

    • 支持DBMS_XMLGEN内置包的convert函数,便于处理XML数据转换。

    • 支持DBMS_TRANSACTION内置包,用于处理事务相关的操作。

    • 支持UTL_MATCH内置包,增强字符串模式匹配功能,简化文本操作流程。

    • 支持DBMS_XMLGEN内置包,便于处理XML数据生成。

    • 支持DBMS_SPACE内置包,便于处理空间管理相关的操作。

    • 支持DBMS_DDL内置包,便于处理DDL相关的操作。

    • 修复DBMS_UTILITY堆栈打印格式与Oracle不一致的问题,提升系统稳定性。

  • 触发器

    • 支持DDL系统触发器,便于处理DDL操作相关触发器。

    • 支持ALTER TRIGGER ENABLE/DISABLE管理系统触发器,便于控制触发器的行为。

    • 支持Schema/Database级别的DDL系统触发器,便于处理相应级别的DDL操作。

    • 支持触发器子函数调用updating('col')语法,便于处理复杂的触发器逻辑。

    • 支持包中一维SUBTYPE,扩展包的数据模型支持,简化复杂对象定义。

    • 包中record支持constraint,确保数据完整性。

    • 支持包忽略大小写访问。

    • 支持包函数依赖后续定义的类型,扩展包内对象依赖支持范围。

    • 支持包函数存储过程忽略默认值,简化复杂业务逻辑配置。

    • 支持使用包变量指定包函数参数类型,增强参数化能力。

    • 支持包变量作为存储过程变量,便于处理复杂的包逻辑。

    • 支持包变量作为子函数参数默认值,提升接口调用灵活性。

    • 支持包内存在同名的私有变量和公有变量。

    • 支持使用do关键字作为包名,提升包命名灵活性。

    • 支持包中函数和存储过程同名,便于处理复杂的包逻辑。

    • 支持私有函数使用私有变量作为参数默认值,提升私有函数的灵活性。

    • 支持Pragma Serially_Reusable语法,优化包的性能。

    • 修复存储过程返回变长包变量且包变量值为NULL场景下的崩溃问题,提升系统稳定性。

    • 修复包在意外场景下未重制全局变量的问题,提升系统稳定性。

    • 修复包变量与局部变量冲突问题,提升稳定性。

    • 修复包在其他两种场景下的Crash问题,提升系统稳定性。

    • 修复包中record字段做参数时默认为R/W模式问题,提升系统稳定性。

    • 修复pkgvar节点在rule的显示,便于调试包逻辑。

  • 子函数

    • 支持子函数使用外部变量作为参数默认值,简化变量传递逻辑。

    • 支持触发器的子函数使用:new/:old,增强触发器子函数兼容性。

    • 支持子函数中的集合类型元素使用外部变量,便于处理复杂的数据结构。

    • 支持包中子函数使用包中私有函数,保证包内资源统一调度。

    • 支持在子函数中使用包变量,便于处理复杂的包逻辑。

    • 支持子函数使用默认的排序规则执行,降低复杂子函数条件逻辑开销。

    • 支持在包子函数中使用外部变量,便于处理复杂的子函数逻辑。

    • 支持调用子函数下的变量,增强动态参数化能力。

    • 重构子函数参数默认值逻辑,提升子函数的功能。

    • 修复p_set_local_func_param钩子未初始化导致崩溃的问题,提升系统稳定性。

    • 修复子函数中变量查找逻辑错误,防止运行崩溃问题。

  • 游标

    • 支持使用=>指定游标参数默认值。

    • 支持无参数游标的open cursor()语法,简化游标初始化逻辑。

    • 支持定义游标时指定参数默认值。

    • 支持cursor%rowtype指定函数参数类型,便于处理复杂的数据结构。

    • 支持在ROLLBACK后使用持久化游标,拓展数据查询延续性。

    • 支持默认非滚动式游标,降低内存占用优化执行性能。

    • 支持包函数中的游标使用包中其他函数,便于处理复杂的包逻辑。

    • 支持使用cursor % rowtype作为函数参数。

    • 支持游标参数中%type忽略typmod,提升游标管理灵活性。

    • 支持在游标的子查询中使用包变量,便于处理复杂的包逻辑。

    • 支持显式游标重复打开,简化循环查询逻辑。

    • 忽略exception中使用closed游标报错,降低调试复杂度。

    • 修复子函数中游标查询使用错误参数的问题,提升系统稳定性。

    • 修复游标fetch语句中丢失pkg_ins的问题,确保游标数据完整性。

    • 修复持久化游标导致的数据库缺陷,提升系统稳定性。

  • 集合类型

    • 支持使用关联数组作为参数和返回值,便于处理复杂的数据结构。

    • 支持变长数据等价声明,简化集合类型空间管理逻辑。

    • 支持集合类型范围删除。

    • 支持内置包内置关联数组,增强集合类型的功能。

    • 支持三维关联数组,扩展了集合类型的功能,便于处理复杂的数据结构。

    • 支持关联数组元素为二维record,增强复合类型表达。

    • 支持关联数组与record嵌套,便于处理复杂的数据结构。

    • 支持fetch bulk intocoll(idx).recfield集合类型,优化DML执行效率。

    • 支持在DML语句中使用高维集合类型,便于处理复杂的数据操作。

    • 支持集合类型的函数参数默认值,降低函数设计复杂度。

    • 支持关联数组构造器,增强集合类型功能。

    • 支持集合类型的转换操作,提升集合类型使用灵活性。

    • 支持集合类型的集合操作,便于处理复杂的数据操作。

    • 支持函数返回关联数组嵌套record,增强集合类型的功能。

    • 支持使用集合类型的元素作为函数的OUT参数,便于处理复杂的函数逻辑。

    • 支持集合类型构造器,扩展集合类型功能。

    • 支持集合操作multiset cast,便于处理复杂的数据操作。

    • 优化关联数组作为IN参数时的内存拷贝问题,提升集合类型管理的效率。

    • 修复集合类型下标内存泄漏问题。

    • 修复关联数组构造器不合理内存上下文。

    • 修复集合类型元素中的record字段未忽略约束的问题。

    • 修复集合类型元素执行DML错误的问题,提升系统稳定性。

    • 修复存储过程包含savepoint返回关联数组崩溃的问题。

    • 修复bulk into时使用rowcount作为集合类型元素下标计算错误的问题。

    • 修复集合类型bulk into时关联数组对象缺失拷贝的问题。

    • 修复record字段为集合类型时内存释放逻辑错误,提升系统稳定性。

  • 基础功能

    • 支持PROGRAM_ERROR异常语法,便于处理复杂的错误场景。

    • 支持子函数recfield字段存在性检查,提升数据库操作的安全性和有效性。

    • 支持FOR row IN循环语句,扩展循环语句的功能。

    • 支持使用record数组作为函数参数。

    • 支持SQL层保留关键字作为函数名,提升函数命名的灵活性,便于处理与Oracle兼容的函数调用。

    • 支持PL层使用collectreverse作为存储过程名,提升存储过程命名的灵活性,便于处理与Oracle兼容的存储过程调用。

    • 支持goto loop语法,扩展控制流的功能。

    • 支持在PL块的子查询中使用包变量,便于处理复杂的包逻辑。

    • 支持在函数中使用func.var调用函数声明的变量。

    • 支持使用raise func.exception抛出异常,便于处理复杂的错误场景。

    • 支持部分异常号SQLCODE的兼容性,提升与Oracle异常处理兼容性。

    • 支持Oracle形式的loop reverse语法,提升Oracle循环逻辑兼容性。

    • 支持内置的plsql_unit变量,用于获取当前PL/SQL单元的信息。

    • 支持table % rowtype忽略约束,便于处理复杂的数据结构。

    • 支持额外的错误码映射,便于处理复杂的错误场景。

    • 支持对变量取类型作为参数时忽略typmod,增强PL/SQL的功能,便于处理复杂的数据结构。

    • 支持打印PL内部错误信息,增强调试功能,便于排查PL/SQL中的问题。

    • 支持tupledesc相同的复合类型相互转换。

    • 支持PostgreSQL错误码58P01映射,便于处理与PostgreSQL兼容的错误场景。

    • 支持SAVEPOINT的复用,以防止循环体中产生过多的子事务,提升事务管理的效率。

    • 加速自治事务对于外层事务体的嵌套获取,提升事务管理的效率。

    • 优化长子事务中内存释放机制,提升事务管理的效率。

    • 修复不可见列存在时相同tupledesc的类型转换,确保PL管理的可靠性。

    • 修复重复申请内存上下文时的正确断言,提升系统稳定性。

    • 修复包中record引用错误导致的崩溃。

    • 修复PL提交时资源拥有者绑定错误的问题,提升系统稳定性。

    • 修复某个PORTAL场景下PL事务无法提交的问题,提升系统稳定性。

    • 修复未初始化的局部变量,提升系统稳定性。

    • 修复PL/SQL事务下的一处不稳定场景问题,提升系统稳定性。

    • 修复事务结束后用户上下文不一致的问题。

    • 修复子函数导致PL/SQL调试行数显示错误问题,提升系统稳定性。

    • 修复函数OUT参数注册但未执行的问题。

    • 修复声明为NOT NULLrecord字段赋值为NULL报错的问题。

客户端和驱动兼容

JDBC

本开发周期内新增45.4.0.10.5、45.4.0.10.645.4.0.10.7版本,提升JDBCOracle场景的兼容性能力。

  • 版本45.4.0.10.7(2025-01-06)

    • 支持兼容Oracle方式的注释功能(即支持/* /* Comments */功能)。

    • 修复Mybatis调用Clob接口时,使用空值导致的Misuse of castNonNull问题。

  • 版本45.4.0.10.6(2024-12-04)

    • 支持高版本JDBCChannel Binding功能。

    • 升级escapeSyntaxCallMode参数默认值为callIfNoReturn,适配Oracle的参数绑定行为。

    • 修复attidentity识别错误可能导致的列类型获取不正确缺陷。

  • 版本45.4.0.10.5(2024-10-24)

    • 优化resetNlsFormat参数的设置,确保连接时的正确配置。同时,避免在审计日志中留下非预期的执行记录。

    • 修复逻辑复制测试中因无法识别java.nio.Buffer类型接口而导致的错误。

    • 修复存储过程中CASE WHEN...END识别结束解析不正确的问题。

ODBC

本开发周期内发布13.02.0000.1版本,与社区版本功能对齐。

版本13.02.0000.1(2025-02-10)

  • DATE类型兼容Oracle,包含时分秒信息。

  • INTERVAL类型兼容Oracle,禁止直接查询INTERVAL列,需要将INTERVAL列转换为字符串使用。

  • PGAPI_ColumnsAPI适配ROWIDDTS,不展示ROWIDDTS相关的系统列和系统索引。

  • PGAPI_ColumnsAPI支持以关键字作为列名场景。

Debezium PolarDBO connector

新增兼容PolarDB PostgreSQL版(兼容Oracle) 2.0版本的Debezium connector打包指南,协助您构建相关的生态应用。

PolarDB-Tools

PolarDB-Tools的功能迭代,适配新版本新增的兼容特性。

pgAdmin4

本开发周期内发布8.8.1版本。

版本8.8.1(2024-09-29)

  • 新增功能:支持PolarDB PostgreSQL版(兼容Oracle) 2.0版本中PL/SQL存储过程调试。

迁移与评估

结构迁移

  • 基于public架构的同义词迁移功能,有效支持客户数据库对象迁移应用场景。

  • PolarDB PostgreSQL版(兼容Oracle) 2.0兼容性评估模块方面新增支持3个核心parser特性,包括嵌套结构解析、动态SQL识别和复杂数据类型处理。

数据迁移

  • 在迁移功能方面,实现了全增量模式下对任意数据类型(ANYDATA)的全面支持。

  • 新增支持packagepackage_bodyprocedurefunction等高级对象迁移

  • 优化批量处理机制,单次迁移任务处理能力提升约40%。

  • 本页导读
  • 更新日志
  • 内核兼容性提升
  • PL/SQL
  • 客户端和驱动兼容
  • 迁移与评估