2024年4月至2024年9月

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

image

更新日志

内核兼容性提升

以下仅为内核兼容性提升,详细的内核版本更新记录请参考PolarDB PostgreSQL版(兼容Oracle)2.0版本更新说明

  • 内置对象

    • 支持类似 number()的用法,并引入带引号的函数调用方式(如"TO_CHAR"),作为对大小写功能的扩展,更好地兼容原生SQL中的函数调用习惯。

    • 支持对行类型的IS NULLIS 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相关关键字的支持,扩展结构迁移过程中的兼容场景。

    • 支持在使用DISTINCTORDER BY关键字时的多种特殊场景,满足对于Oracle中非SQL标准用法的需求。

    • 支持TO_DATE输入日期字符串和指定日期格式不严格匹配场景的兼容,提升NVLCONVERT函数返回时间类型时的兼容性。

    • 支持一元操作符'+'返回结果类型与Oracle兼容。

    • 支持新增同义词忽略大小写的功能,提升Oracle兼容性。

    • 支持在SELECT语句中将关键字作为表别名,进一步增强Oracle兼容性。

    • 支持在大小写交替的场景下忽略大小写,以满足非标准SQL用法的兼容需求。

    • 支持通过ALTER SESSION设置事务隔离级别。

    • 支持LIKE2LIKE4LIKEC操作符。

    • 支持IS NaNIS 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同义词。

    • 支持PACKAGETYPE 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的处理。