在云原生数据库PolarDB PostgreSQL版(兼容Oracle) 2.0版本(以下简称PolarDB)2024年4月至2024年9月的开发周期中,PolarDB在兼容性、安全性、迁移能力以及驱动工具等多个方面实现了显著提升。本文将简要总结PolarDB在过去半年内各个领域的进展和改进。
更新日志
内核兼容性提升
以下仅为内核兼容性提升,详细的内核版本更新记录请参考PolarDB PostgreSQL版(兼容Oracle)2.0版本更新说明。
内置对象
支持类似
number()的用法,并引入带引号的函数调用方式(如"TO_CHAR"),作为对大小写功能的扩展,更好地兼容原生SQL中的函数调用习惯。支持对行类型的
IS NULL和IS NOT NULL判断,确保与Oracle的行为兼容。增强对
DBA_OBJECTS视图中的同义词、表分区、包及其体、类型及其体、上下文、目录、语言、操作符、任务和队列的支持,以及DBA_INDEXES视图中的索引类型和nls_parameters视图,提升视图的使用兼容性。修复
CHAR类型因语义差异引起的回流Oracle失败问题。修复
has_schema_privilege系列函数的不兼容问题,不会因内置对象而返回错误。修复视图显示包含对象名称时不应包含Schema的问题,解决通过视图名称过滤对象失败的问题。
修复
timestamptz类型转换为date类型时小数点未截断的问题。修复
information_schema.parameters视图中显示存储过程参数默认值的问题。修复
information_schema内多个视图无法显示date类型的问题。修复
DBA_SOURCE视图中存储过程定义信息被截断的问题。
SQL语法
支持对
EDITIONTABLE相关关键字的支持,扩展结构迁移过程中的兼容场景。支持在使用
DISTINCT和ORDER BY关键字时的多种特殊场景,满足对于Oracle中非SQL标准用法的需求。支持
TO_DATE输入日期字符串和指定日期格式不严格匹配场景的兼容,提升NVL和CONVERT函数返回时间类型时的兼容性。支持一元操作符
'+'返回结果类型与Oracle兼容。支持新增同义词忽略大小写的功能,提升Oracle兼容性。
支持在
SELECT语句中将关键字作为表别名,进一步增强Oracle兼容性。支持在大小写交替的场景下忽略大小写,以满足非标准SQL用法的兼容需求。
支持通过
ALTER SESSION设置事务隔离级别。支持
LIKE2、LIKE4和LIKEC操作符。支持
IS NaN和IS INFINITE判断。支持窗口函数的
DISTINCT操作。修复当
b为单一记录列表时,表达式where a in b的语义与Oracle不一致的问题,以增强Oracle兼容性。修复更新同义词时出现的
RTE(Range Table Entry)找不到问题。修复一系列函数绑定参数的缺陷,提升系统稳定性。
DDL
支持
CREATE PROFILE功能,提供密码复用次数、时间与密码验证函数等全新功能,显著提升数据库安全性。支持
ALTER TABLE ... RENAME在修改表列名时,可选使用COLUMN关键字。支持
CREATE CONTEXT使用INITIALIZED语句,进一步提升兼容性。支持在
PUBLIC SCHEMA下创建PUBLIC同义词。支持
PACKAGE和TYPE BODY的同义词。支持
MODIFY COLUMN语法,实现与Oracle的兼容。支持通过
DROP AGGREGATE方式删除聚合函数,提升兼容性。支持
DROP语法中的FORCE关键字。
分区表
支持自动添加分区表索引功能,当需要建立全局索引时,支持不显式使用
GLOBAL的调用方式。支持在分区表的触发器中使用
REFERENCING OLD语法。修复分区表创建过程中的相关稳定性问题。
包
支持包变量作为包函数参数的默认值。
支持
CREATE OR REPLACE PACKAGE BODY功能。支持在
Package Body中使用前向声明来声明私有函数,提升兼容性。支持
DBMS_LOB包中缺失的函数和包变量。
PL/SQL
支持在函数中进行事务提交,并支持在
SECURE DEFINER状态下的函数提交。修复一系列语句级事务、自治事务等稳定性缺陷。
支持在包未实例化的情况下,通过
cursor % attribute访问包中游标的属性。修复触发器函数声明段中使用
:new/:old报错的问题。修复当存储过程包含
out refcursor且参数为NULL时,内部其他游标使用报错的问题。修复同义词传给触发器时的错误
objectAdress。修复DDL逻辑复制创建的事件触发器导致创建外部表报错的问题。
集合类型
支持集合类型
TABLE表达式的COLUMN_VALUE伪列。支持通过
record.field().field方式直接访问record中集合类型的字段。支持使用
collection_type % type功能。
客户端和驱动兼容
PolarDB-Tools
PolarDB-Tools的功能迭代主要集中在修复用法不兼容问题,提升工具对数据的兼容性。具体改进包括:
修复PSQL中使用绑定冒号参数的兼容性问题。
修复OnCommitRollback功能的兼容性问题。
JDBC
JDBC于2024年9月2日更新至V45.4.0.10.4版本,相较于历史版本,此次更新的主要内容包括:
修复了PL块中绑定不正确的问题。为减小对性能的影响,已默认关闭该功能。
支持在同一类型内部进行隐式转换,允许字符类型(如VARCHAR、CHAR)与数字类型(如NUMERIC、INTEGER、DOUBLE)作为INOUT参数相互转换。
驱动中元信息的
getDatabaseProductName()函数的返回值更新为“POLARDB2 Database Compatible with Oracle”。修复了在MyBatis中,当对象实体的注册类型为Timestamp时,数据库无法正确推断参数类型的问题。
.NET
.NET于2024年9月18日更新至V8.0.4.1版本,至此,PolarDB的.NET系列驱动已全面支持.NET 2.0、.NET 3.5、.NET 4.0、.NET 5.0、.NET 6.0、.NET 7.0、.NET 8.0,以及netcoreapp3.1、netstandard2.0和netstandard2.1等多个版本。相较于历史版本,本次 .NET驱动在功能上有以下显著提升:
支持V8.0.4.1版本,兼容.NET 6.0、.NET 7.0 和 .NET 8.0版本。
允许不带$$符号执行PL/SQL存储过程。
新增对Oracle语法兼容 2.0版本中64位日期格式的识别支持。
修复了有关DBMS内置对象识别的元信息问题。
修正了因ROWID导致的类型读取错误。
pgAdmin4
PolarDB于2024年8月26日发布了兼容pgAdmin4的版本,该版本可在Windows系统上部署,专为PolarDB中的PL/SQL调试而设计。
引入PL/SQL存储过程的调试功能。
PolarDBO Flink CDC
PolarDBO Flink CDC基于社区Postgres CDC适配,用于读取数据库全量快照数据和变更数据。主要功能包括:
全面支持Flink产品的各类型与PolarDB PostgreSQL版(兼容Oracle) 2.0类型之间的双向映射。
实现64位DATE在逻辑复制链路中的适配,确保秒级精度。
DTS迁移
ADAM评估
ADAM评估最新版本主要提升迁移兼容性评估的准确性,同时保持与PolarDB语法更新的同步。以下是此次升级的主要改进:
提高ADAM评估中内置包和内置对象识别的准确性。
增强了语法树对部分关键字的识别能力。
DTS结构迁移
在此开发周期内,PolarDB与DTS的协作显著提升,主要体现在以下几个方面:
新增增量数据后的序列同步功能。
提升结构迁移兼容性,适配大小写问题,修复索引迁移和分区表适配中的相关问题。
修复DATE类型的兼容性问题,并改进了对字符类型NaN的处理。