2023年10月至2024年3月

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

image

更新日志

内核兼容性提升

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

  • 内置对象

    • 支持乘方操作符。

    • 支持在64位DATE类型上创建BITMAP类型索引。

    • 支持通过func(arg1 => 1)方式调用内置函数的参数名称。

    • 支持V$VERSIONDBA_TYPE_ATTRS等一系列兼容性内置视图。

    • 支持TO_DATE函数对于'Y,YYY'形式控制标识位。

    • 增加DBA_CONSTRAINTS等视图额外列,提升视图部分兼容性。

    • 支持xmlxmltype之间的类型转换,以防止某些调用失败问题。

    • 扩充TO_CHAR函数格式,支持如DDSPTH等一系列兼容性控制标识位。

    • 修复一系列非IMMUTABLE属性的内置函数属性,避免因函数属性导致的执行计划不正确。

    • 修复DECODE表达式的返回类型兼容性问题。

    • 修复mod函数的兼容性问题,尤其是在除以0时的行为。

    • 修复V$VERSION视图的访问权限问题。

  • 内置包

    • 支持DBMS_UTILITY内置包获取依赖。

    • 支持DBMS_SESSION内置包中的三个新函数。

    • 提升DBMS_SQL内置包的一系列不兼容问题。

    • 提升DBMS_ALERT内置包对空消息的支持。

    • 提升DBMS_MVIEW内置包,支持在REFRESH时不包含依赖的对象。

    • 修复DBMS_LOB包中的不兼容函数。

  • 分区表

    • 支持在分区表中使用Interval分区并配合Global Index

    • 支持允许分区表中的MAXVALUE分区转为DEFAULT分区,以接受分区键上的空值。

    • 修复分区表视图查询中的缺陷。

  • SQL语法

    • 支持包同义词的使用。

    • 支持将PRIMARY作为非保留关键字,用作表名、列名或函数名。

    • 支持直接通过DROP TRIGGER不写表名的方式删除触发器。

    • 支持扩充函数的最大参数个数至384

    • 支持复杂类型的CREATE OR REPLACE操作。

    • 支持在CREATE TRIGGER后添加REFERENCING关键字。

    • 支持在创建物化视图时使用BUILD关键字。

    • 支持在有视图依赖的情况下修改基表列。

    • 支持在使用OR REPLACE关键字时修改视图的列。

    • 支持索引创建时使用NOLOGGING等关键字。

    • 支持INSERT ALL跟完整的子查询语法。

    • 支持ALTER TYPE MODIFY ATTRIBUTE语法。

    • 支持函数OUT参数类型进行隐式类型转换,修复了一系列由 OUT返回参数引发的缺陷。

    • 修复64位DATE类型通过DBLINK推送到远端后的缺陷。

    • 修复全局临时表重复删除临时文件的缺陷。

  • PL/SQL

    • 支持NEW + 函数名的方式调用函数。

    • 支持对象类型中的存储过程直接在PL/SQL中调用。

    • 支持组合类型的%TYPE语法。

    • 支持EXECUTE IMMEDIATE语句中使用OUT参数返回值。

    • 修复语句级事务因CID导致的缺陷及失败状态问题。

    • 修复自治事务触发的buffer泄漏相关缺陷。

    • 修复对象类型允许包头函数未在包体中定义的缺陷。

    • 修复对象类型构造函数的兼容性问题。

    • 修复对象类型在跨进程使用时的问题。

    • 修复未匹配LABEL语法时执行会中断的问题。

权限和安全特性

  • 限制超级用户对用户自定义函数(UDF)的使用,以防止在提权漏洞中利用钓鱼函数,是阻止数据提取漏洞的重要环节。

  • 支持内置用户的REPLICATION权限,允许用户通过REPLICATION组的内置用户为其他用户进行组权限赋权。

  • 默认情况下,高权限账号将拥有CAST权限REPLICATION权限

  • 高权限账号默认具备pg_monitor权限,能够通过该权限为其他用户授予组权限,同时去除某些敏感信息读取的权限。

驱动和工具兼容

PolarDB-Tools

修复pg_dump工具在导出内置函数时的缺陷。

JDBC

在2024年4月11日,JDBC发布V45.4.0.9版本,主要针对内置数据类型的处理和转换进行优化,从而提升PolarDB的行为兼容性。此次更新包括以下重要特性:

  • 支持列名和表名的大写以及严格大写模式。

  • 支持64位DATE类型,其数据表示格式与TimeStamp完全相同,相关驱动可使用Timestamp方式处理该DATE类型。

  • 支持Oracle模式下的Interval输入。

  • 支持NUMBER类型的GET行为。

  • 支持将BLOB类型处理为Bytea,将CLOB类型处理为Text

  • 支持不带$$符号的存储过程。

  • 支持使用冒号作为参数的变量名。

  • 支持匿名块中的绑定参数。

  • 支持屏蔽PL/SQL的警告信息。

此次版本的发布将显著提升开发者在使用PolarDB时的灵活性和便利性。

.NET

在2024年4月10日,.NET发布V7.0.6版本,PolarDB的.NET系列驱动支持.NET 2.0、.NET 3.5、.NET 4.0、.NET 5.0、.NET 6.0、.NET 7.0以及netcoreapp3.1、netstandard2.0和netstandard2.1等多个版本。PolarDB 的发布版本中主要包含以下功能:

  • 允许不带$$符号执行PL/SQL存储过程。

  • 识别DECLAREBEGIN块开头的PL代码块。

  • 支持Oracle语法兼容 2.064位DATE类型识别。