在云原生数据库PolarDB PostgreSQL版(兼容Oracle) 2.0版本(以下简称PolarDB)2024年10月至2025年3月的开发周期中,针对兼容性、迁移能力以及驱动工具等多个方面实现了显著提升。本文将简要总结PolarDB在本开发周期内各个领域的进展和改进。
更新日志
内核兼容性提升
以下仅为内核兼容性提升,详细的内核版本更新记录请参考PolarDB PostgreSQL版(兼容Oracle)2.0版本更新说明。
内置类型
新增JSON_ELEMENT_T、JSON_OBJECT_T、JSON_ARRAY_T类型支持,增强JSON数据处理的灵活性,支持更复杂的JSON操作场景。
支持
XmlType的extract和getStringVal函数,扩展XML数据处理能力,便于高效提取和操作XML数据中的目标内容。在2.0.14.13.27.0及以上内核小版本,支持
INT2,INT4和INT8类型的除法结果都为浮点数,提升数值计算与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语法灵活性,便于处理复杂的查询逻辑。支持使用
extract和get关键字作为函数名,便于处理与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表达式,增强表达式处理的稳定性。
支持NAME与VARCHAR类型的隐式转换,便于处理复杂的数据结构。
支持
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 into至coll(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层使用
collect与reverse作为存储过程名,提升存储过程命名的灵活性,便于处理与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 NULL的
record字段赋值为NULL报错的问题。
客户端和驱动兼容
JDBC
本开发周期内新增45.4.0.10.5、45.4.0.10.6和45.4.0.10.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识别错误可能导致的列类型获取不正确缺陷。
版本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支持以关键字作为列名场景。
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)的全面支持。
新增支持
package、package_body、procedure、function等高级对象迁移优化批量处理机制,单次迁移任务处理能力提升约40%。