在云原生数据库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的处理。