在云原生数据库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%。
- 本页导读
- 更新日志
- 内核兼容性提升
- PL/SQL
- 客户端和驱动兼容
- 迁移与评估