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

更新日志
内核兼容性
以下仅为内核兼容性提升,详细的内核版本更新记录请参考PolarDB PostgreSQL版(兼容Oracle)2.0版本更新说明。下述部分特性由于版本发布延时暂未在正式版本上线,会在短时间内随版本迭代逐步上线。
内置类型
支持JSON_ELEMENT_T、JSON_OBJECT_T、JSON_ARRAY_T类型,增强了JSON数据处理的灵活性,支持更复杂的JSON操作场景。
支持XmlTyp相关Extract和getStringval函数,扩展了XML数据处理的能力,便于从XML中提取和操作数据。
支持新实例上,INT2,INT4,INT8类型的除法结果都为浮点数,提升了数值计算的兼容性,确保与Oracle行为一致。
支持standard_hash等若干内置函数、ROLE_ROLE_PRIVS等若干视图,增强了函数和视图的功能覆盖范围,满足更多业务需求。
支持row类型oracle模式下的null和not null判断,提升了与Oracle的兼容性,确保数据完整性检查的一致性。
支持oracle中的odci类型,扩展了类型支持的场景,便于与Oracle系统集成。
支持复合类型与带默认值的record类型的转换,扩展了类型转换的功能,便于处理复杂数据结构。
修改DATE类型在json和xml中丢失时分秒精度的问题,修复了数据精度丢失的缺陷,确保时间数据的准确性。
修复数字类型错误的长度计算,提升了数值计算的准确性,避免因长度计算错误导致的数据异常。
修复复合类型与recod转换问题,增强了类型转换的稳定性,确保数据转换的可靠性。
内置视图
支持DBA_COL_COMMENTS视图,增强了视图功能的覆盖范围,便于查看和管理列注释信息。
支持nls参数视图,扩展了国际化参数的支持,便于管理多语言环境下的配置。
支持全参数的DBA_TAB_COLUMNS视图,增强了视图功能的完整性,提供更全面的表列信息。
支持session_role内置视图,扩展了会话角色管理的功能,便于查看和调整会话角色。
支持USER_TAB_PARTITIONS视图的HIGH_VALUE,增强了分区表管理的功能,便于查看分区表的高值信息。
支持DBA_OBJECTS视图的CREATED列,扩展了对象管理的信息覆盖范围,便于查看对象的创建时间。
修复 dbms_session 内置视图权限问题,提升了视图使用的安全性,确保权限管理的正确性。
SQL语法
支持> =号之间加空格也能正常使用,增强了SQL语法的灵活性,提升用户编写SQL的便利性。
支持SELECT FOR UPDATE ORDER BY,扩展了锁机制的适用场景,确保数据更新的顺序性。
支持在视图和表中使用EDITIONABLE关键字,增强了版本管理的功能,便于管理不同版本的对象。
支持ROWNUM带引号状态下的调用,提升了与Oracle的兼容性,确保SQL语法的灵活性。
支持带引号的USER函数使用,增强了函数调用的灵活性,便于处理大小写敏感的场景。
支持TEXT类型和其他类型进行UNION操作,扩展了数据操作的场景,便于处理不同类型的数据合并。
支持函数在调用时嵌套多层括号,增强了函数调用的灵活性,便于处理复杂的函数调用逻辑。
支持在合法的场景下FROM LIST中出现多个同名的别名,提升了SQL语法的兼容性,便于处理复杂的查询逻辑。
支持+操作符的高级场景应用,扩展了操作符的功能,便于处理复杂的数值计算。
支持inner关键字做别名,增强了SQL语法的灵活性,便于处理复杂的查询逻辑。
支持extract关键字作为函数名,扩展了函数命名的场景,便于处理与Oracle兼容的函数调用。
支持get作为函数名,增强了函数命名的灵活性,便于处理与Oracle兼容的函数调用。
支持TYPE BODY类型数据使用集合类型的方法,扩展了类型操作的功能,便于处理复杂的数据结构。
支持函数调用返回值嵌套集合类型下标取值,增强了函数返回值的处理能力,便于处理复杂的数据操作。
支持select A 列ORDER BY B列的语法,提升了SQL语法的灵活性,便于处理复杂的排序逻辑。
支持导出By Defalut on NULL的逻辑,增强了默认值处理的兼容性,确保与Oracle行为一致。
支持子查询的rowid,扩展了子查询的功能,便于处理复杂的查询逻辑。
支持merge into子查询,增强了数据合并操作的灵活性,便于处理复杂的数据更新逻辑。
支持position、cast、decode等关键字转为非保留关键字,增强了SQL语法的兼容性,便于处理与Oracle兼容的SQL语句。
支持类型继承,扩展了类型系统的功能,便于处理复杂的数据结构。
支持大小写交替时默认小写,增强了SQL语法的灵活性,便于处理大小写敏感的SQL语句。
修复嵌套聚合函数的crash问题,提升了系统稳定性,确保复杂查询的可靠性。
修复 dblink 插件未处理 rowid 列的问题,提升了伪列处理的兼容性,确保与Oracle行为一致。
函数计算
支持JSON_OBJECT、JSON_ARRAYAGG函数,增强了JSON数据处理的能力,便于生成和操作JSON数据。
XMLELEMENT、XMLAGG返回XmlType类型,扩展了XML数据处理的功能,便于生成和操作XML数据。
XMLELEMENT、XMLAGG 支持 .function 函数调用,增强了函数调用的灵活性,便于处理复杂的XML操作。
支持convert(date,name,name)和nvl(interval, interval)内置函数,扩展了函数的功能覆盖范围,便于处理日期和间隔类型的数据。
支持各种常见类型的'+'一元操作符,提升了操作符的兼容性,便于处理复杂的数值计算。
修复to_date、to_char函数syyyy格式错误的问题,提升了日期处理的准确性,确保与Oracle行为一致。
修复函数公共同义词和函数的调用优先级错误的问题,增强了函数调用的稳定性,确保函数调用的正确性。
支持函数OUT参数时嵌套隐式类型转换,扩展了参数处理的场景,便于处理复杂的函数调用逻辑。
extract、extractValue、existsNode函数参数值与返回值兼容,增强了函数调用的兼容性,确保与Oracle行为一致。
XMLSEQUENCE函数,扩展了XML数据处理的功能,便于从XML中提取序列数据。
USERENV函数,增强了会话环境信息的管理功能,便于获取会话相关的信息。
修复to_date函数报错逻辑,提升了日期处理的准确性,确保与Oracle行为一致。
修复decode表达式,增强了表达式处理的稳定性,确保与Oracle行为一致。
支持name类型和varchar类型的隐式类型转换,扩展了类型转换的功能,便于处理复杂的数据结构。
支持wmsys.wm_concat函数,增强了字符串拼接的功能,便于处理复杂的数据操作。
支持函数输入更多参数,扩展了函数的功能覆盖范围,便于处理复杂的业务逻辑。
支持nvl函数处理更多类型,增强了函数的功能覆盖范围,便于处理复杂的数据操作。
DDL
支持ALTER SESSION ENABLE 语法,增强了会话管理的功能,便于控制会话的行为。
支持创建表时生成列语法以及部分特殊的关键字,扩展了表创建的功能,便于处理复杂的表结构。
支持MONITORING 关键字,增强了表监控的功能,便于跟踪表的使用情况。
支持 alter type add (attribute) 语法,扩展了类型管理的功能,便于处理复杂的数据结构。
支持refresh complete 语法,增强了物化视图管理的功能,便于更新物化视图的数据。
支持适配新版本的TYPE BODY的替换逻辑,扩展了类型管理的功能,便于处理复杂的数据结构。
支持/操作符单独调用以适配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
内置包
支持DBMS_DDL内置包,扩展了内置包的功能,便于处理DDL相关的操作
支持DBMS_SPACE内置包,扩展了内置包的功能,便于处理空间管理相关的操作。
支持DBMS_TRANSACTION 内置包,扩展了内置包的功能,便于处理事务相关的操作。
支持DBMS_XMLGEN内置包,扩展了内置包的功能,便于处理XML数据生成。
支持UTL_MATCH内置包,扩展了内置包的功能,便于处理字符串匹配相关的操作。
支持UTL_HTTP内置包,扩展了内置包的功能,便于处理HTTP相关的操作。
支持UTL_TCP 内置包,扩展了内置包的功能,便于处理TCP相关的操作。
支持UTL_URL 内置包,扩展了内置包的功能,便于处理URL相关的操作。
修复DBMS_UTILITY 包堆栈打印格式与 Oracle 不一致的问题,提升了系统稳定性,确保内置包管理的可靠性。
触发器
支持DDL系统触发器,扩展了触发器管理的功能,便于处理DDL操作相关的触发器。
系统触发器支持ALTER TRIGGER ENABLE/DISABLE,增强了触发器管理的功能,便于控制触发器的行为。
支持schema级别的DDL系统触发器,扩展了触发器管理的功能,便于处理schema级别的DDL操作。
支持database级别的DDL系统触发器,扩展了触发器管理的功能,便于处理database级别的DDL操作。
支持触发器子函数调用updating('col')语法,扩展了触发器子函数的功能,便于处理复杂的触发器逻辑。
包
支持包中一维SUBTYPE,扩展了包管理的功能,便于处理复杂的数据结构。
支持Package 中 recrod 支持 constraint,增强了包管理的功能,确保数据完整性。
支持 Package 忽略大小写访问,增强了包管理的功能,便于处理大小写敏感的包访问。
支持包函数依赖后续定义的类型,扩展了包管理的功能,便于处理复杂的数据结构。
支持包函数存储过程忽略默认值,增强了包管理的功能,便于处理复杂的包逻辑。
支持包变量用于指定包函数参数类型,扩展了包管理的功能,便于处理复杂的数据结构。
支持包变量作为存储过程变量,增强了包管理的功能,便于处理复杂的包逻辑。
支持包变量作为子函数参数默认值,扩展了包管理的功能,便于处理复杂的包逻辑。
支持包存在同名的私有变量和公有变量,增强了包管理的功能,便于处理复杂的包逻辑。
支持do关键字做包名,扩展了包管理的功能,便于处理复杂的包命名。
支持包中同名的函数和过程,增强了包管理的功能,便于处理复杂的包逻辑。
包中支持一维SUBTYPE,扩展了包管理的功能,便于处理复杂的数据结构。
支持私有函数使用私有变量作为参数默认值,扩展了包管理的功能,便于处理复杂的包逻辑。
支持Pragma Serially_Reusable语法,增强了包管理的功能,便于优化包的性能。
修复存储过程返回变长包变量且包变量值为 NULL 场景下的崩溃问题,提升了系统稳定性,确保包管理的可靠性。
修复包在两种场景下的crash问题,提升了系统稳定性,确保包管理的可靠性。
修复包在意外场景下未重制全局变量的问题,提升了系统稳定性,确保包管理的可靠性。
修复包变量和局部变量的冲突问题,提升了系统稳定性,确保包管理的可靠性。
修复包中 record 字段做参数默认为 R/W 模式问题,提升了系统稳定性,确保包管理的可靠性。
修复pkgvar节点在rule的显示,增强了包管理的功能,便于调试包逻辑。
子函数
支持子函数使用外部变量做参数默认值,扩展了子函数的功能,便于处理复杂的子函数逻辑。
支持触发器的子函数使用 :new/:old,增强了子函数的功能,便于处理复杂的触发器逻辑。
支持子函数中的集合类型元素使用外部变量,扩展了子函数的功能,便于处理复杂的数据结构。
支持包中子函数使用包中私有函数,增强了子函数的功能,便于处理复杂的包逻辑。
支持在子函数中使用包变量,扩展了子函数的功能,便于处理复杂的包逻辑。
支持子函数使用默认的排序规则执行,增强了子函数的功能,便于处理复杂的子函数逻辑。
支持在包子函数中使用外层变量,扩展了子函数的功能,便于处理复杂的子函数逻辑。
支持调用子函数下的变量,增强了子函数的功能,便于处理复杂的子函数逻辑。
重构子函数参数默认值逻辑,提升了子函数的功能,便于处理复杂的子函数逻辑。
修复 p_set_local_func_param 钩子未初始化导致崩溃的问题,提升了系统稳定性,确保子函数管理的可靠性。
修复子函数中变量查找逻辑错误,提升了系统稳定性,确保子函数管理的可靠性。
游标
支持使用 => 指定 cursor 参数默认值,增强了游标管理的功能,便于处理复杂的游标逻辑。
支持无参数cursor的open cursor()语法,扩展了游标管理的功能,便于处理复杂的游标逻辑。
支持cursor参数默认值,增强了游标管理的功能,便于处理复杂的游标逻辑。
支持cursor%rowtype指定函数参数类型,扩展了游标管理的功能,便于处理复杂的数据结构。
支持在ROLLBACK以后使用持久化游标,增强了游标管理的功能,便于处理复杂的游标逻辑。
支持默认非滚动式游标,增强了游标管理的功能,便于优化游标的性能。
支持包函数中的游标使用包中其他函数,扩展了游标管理的功能,便于处理复杂的包逻辑。
支持 cursor % rowtype 做函数参数,扩展了游标管理的功能,便于处理复杂的数据结构。
支持 cursor 参数中 %type 忽略 typmod,增强了游标管理的功能,便于处理复杂的数据结构。
支持在cursor的子查询中使用包变量,扩展了游标管理的功能,便于处理复杂的包逻辑。
支持显式游标重复打开,扩展了游标管理的功能,便于处理复杂的游标逻辑。
忽略exception中使用closed游标报错,增强了游标管理的功能,便于处理复杂的游标逻辑。
修复子函数中游标查询使用错误参数的问题,提升了系统稳定性,确保游标管理的可靠性。
修复游标 fetch 语句中丢失 pkg_ins 的问题,提升了系统稳定性,确保游标管理的可靠性。
修复持久化游标导致的数据库缺陷,提升了系统稳定性,确保游标管理的可靠性。
集合类型
支持关联数组做参数和返回值,扩展了集合类型的功能,便于处理复杂的数据结构。
支持变长数据等价声明,增强了集合类型的功能,便于处理复杂的数据结构。
支持集合类型范围删除,扩展了集合类型的功能,便于处理复杂的数据操作。
支持内置包内置关联数组,增强了集合类型的功能,便于处理复杂的数据结构。
支持三维关联数组,扩展了集合类型的功能,便于处理复杂的数据结构。
支持关联数组元素为二维 record,增强了集合类型的功能,便于处理复杂的数据结构。
支持关联数组与 record 嵌套,扩展了集合类型的功能,便于处理复杂的数据结构。
支持 fetch bulk into 至 coll(idx).recfield 集合类型,增强了集合类型的功能,便于处理复杂的数据操作。
支持高维集合类型在 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 层 collect 与 reverse 做存储过程名,增强了存储过程命名的灵活性,便于处理与Oracle兼容的存储过程调用。
支持 goto loop 语法,扩展了控制流的功能,便于处理复杂的逻辑。
支持pl块的子查询中使用包变量,扩展了PL块的功能,便于处理复杂的包逻辑。
支持在函数中使用func.var调用函数声明的变量,增强了函数的功能,便于处理复杂的函数逻辑。
支持raise func.exception来抛出异常,增强了异常处理的功能,便于处理复杂的错误场景。
支持部分异常号SQLCODE兼容,提升了异常处理的兼容性,确保与Oracle行为一致。
支持 Oracle 形式的 loop reverse 语法,扩展了循环语句的功能,便于处理与Oracle兼容的循环逻辑。
支持内置的 plsql_unit 变量,增强了PL/SQL的功能,便于获取当前PL/SQL单元的信息。
支持 table % rowtype 忽略约束,增强了PL/SQL的功能,便于处理复杂的数据结构。
支持额外的错误码映射,增强了异常处理的功能,便于处理复杂的错误场景。
支持对变量取类型作为参数时忽略typmod,增强了PL/SQL的功能,便于处理复杂的数据结构。
支持打印PL内部错误信息,增强了调试功能,便于排查PL/SQL中的问题。
支持tupledesc相同的复合类型相互转换,增强了PL/SQL的功能,便于处理复杂的数据结构。
支持PG错误码58P01映射,增强了异常处理的功能,便于处理与PostgreSQL兼容的错误场景。
支持SAVEPOINT复用,防止循环体中过多的子事务产生,提升了系统性能,确保事务管理的效率。
加速自治事务对于外层事务体的嵌套获取,提升了系统性能,确保事务管理的效率。
优化长子事务中内存释放机制,提升了系统性能,确保事务管理的效率。
修复不可见列存在时相同tupledesc的类型转换,提升了系统稳定性,确保PL管理的可靠性。
修复重复申请内存上下文时的正确断言,提升了系统稳定性,确保PL管理的可靠性。
修复子函数导致 PL/SQL 调试行数显示错误问题,提升了系统稳定性,确保调试功能的可靠性。
修复包中 record 引用错误导致 crash,提升了系统稳定性,确保包管理的可靠性。
修复PL提交时资源拥有者绑定错误的问题,提升了系统稳定性,确保PL管理的可靠性。
修复某个PORTAL场景下PL事务无法提交的问题,提升了系统稳定性,确保PL管理的可靠性。
修复未初始化的局部变量,提升了系统稳定性,确保PL管理的可靠性。
修复PLSQL事务下的一处不稳定场景问题,提升了系统稳定性,确保PL管理的可靠性。
修复事务结束后用户上下文不一致的问题,提升了系统稳定性,确保PL管理的可靠性。
修复子函数导致 PL/SQL 调试行数显示错误问题,提升了系统稳定性,确保调试功能的可靠性。
修复包中 record 引用错误导致 crash,提升了系统稳定性,确保包管理的可靠性。
修复 function out 参数注册但未执行的问题,提升了系统稳定性,确保函数管理的可靠性。
修复声明为 not null record 字段赋值为 NULL 报错的问题,提升了系统稳定性,确保PL管理的可靠性。
客户端和驱动兼容
JDBC
发布支持45.4.0.10.5、45.4.0.10.6和45.4.0.7 三个版本,提升JDBC在用户Oracle场景的兼容性能力。
版本45.4.0.10.7(2025-01-06)
支持兼容Oracle方式的注释功能(即支持
/* * Comments */
功能)。修复Mybatis调用Clob接口时,使用空值导致的
Misuse of castNonNull
问题。
版本45.4.0.10.6 (2024-12-04)
支持高版本JDBC上的channel binding功能
升级escapeSyntaxCallMode参数默认值为callIfNoReturn,以适配Oracle用户的参数绑定行为
修复一个attidentity识别错误的缺陷,可能导致列类型获取不正确
修复一个CASE WHEN END 会导致解析失败的缺陷
版本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_Columns等API适配ROWID和DTS,不展示ROWID和DTS相关的系统列和系统索引。
PGAPI_Columns等API支持以关键字作为列名场景。
兼容PolarDB PostgreSQL版(兼容Oracle)的Debezium connector
发布兼容PolarDB 2.0版本的Debezium connector 打包指南,协助客户构建相关的生态应用。
PolarDB-Tools
版本 2.0.14.28.0 (2025-02-13)
发布新版本,适配新版本新增的兼容特性。
PgAdmin
版本8.8.1(2024-09-29)
新增功能:支持PolarDB PostgreSQL版(兼容Oracle)2.0版本中PL/SQL存储过程调试。
迁移及评估
结构迁移
基于public架构的同义词迁移功能,有效支持客户数据库对象迁移应用场景。
在PolarDB 2.0兼容性评估模块放方面新增支持3个核心parser特性,包括嵌套结构解析、动态SQL识别和复杂数据类型处理。
数据迁移
在迁移功能方面,实现了全增量模式下对任意数据类型(ANYDATA)的全面支持。
新增支持package、package_body、procedure、function等高级对象迁移,
优化了批量处理机制,单次迁移任务处理能力提升约40%