【新版本】PolarDB PostgreSQL版 15版本正式发布上线

PolarDB PostgreSQL版兼容PostgreSQL 15版本正式发布上线。

概述

PolarDB PostgreSQL版兼容PostgreSQL 15版本注重性能提升。在管理本地和分布式部署中的工作负载方面成效显著。

当前版本主要增强优化了以下方面:

  • 改进排序功能:改进内存和磁盘排序算法。

  • 增强SQL功能:支持SQL标准的MERGE命令。增加使用正则表达式的新函数,用于检查字符串。

  • 改进逻辑复制功能:支持复制2PC事务,发布内容可以使用WHERE进行过滤,支持一次性发布Schema下所有的表。

  • 优化数据库性能:降低内存占用。崩溃恢复加速等。

版本介绍

在社区PostgreSQL 15的基础上,PolarDB还支持一些独有的功能,例如Ganos时空引擎,全局执行计划缓存,GBK/GB18030字符集等。在PolarDB PostgreSQL版 15的第一个发布版本中支持以下插件:hll、hypopg、log_fdw、pase、pg_bigm、pg_cron、pg_jieba、pg_repack、pg_similarity、pgtap、pgvector、pldebugger、prefix、roaringbitmap、rum、varbitx、zhparser、ganos。

同时PolarDB进行了深入的性能优化,例如优化SIMD指令集和原子操作指令集的使用,并在事务处理等模块中使能。使用 PGO、BOLT、LTO、代码段大页等系统级优化手段。支持批量读取、扩展,优化IO性能,并进行了深入的参数调优,提供了极致性能。

说明

关于社区的详细发布信息,请参考社区公告:https://www.postgresql.org/docs/15/release-15.html

发布时间

2024年7月19日

计费模式

全面支持包年包月和按量计费两种计费模式,并且支持计算包、存储包等叠加使用,提供灵活的计费选择。计费详情请参考产品计费

关键提升

PolarDB PostgreSQL版兼容PostgreSQL 15版本相较之前版本的主要优化为:

排序及压缩性能提升

  • 改进PostgreSQL的内存和磁盘排序算法。在基准测试中显示,对于不同数据类型的排序,速度可提高20%到400%不等。

  • 提升以下函数作为窗口函数使用时的性能:row_number()rank()dense_rank()count()

  • 支持SELECT DISTINCT并行查询。

  • 基于PostgreSQL 14版本的异步远程查询功能,支持外部数据包装器postgres_fdw异步提交。

  • 支持对WAL日志文件的LZ4和Zstandard (zstd)压缩,在一定的工作负载下获得空间和性能优化。

  • 对部分操作系统,支持对WAL页面的预加载,加快恢复时间。

  • PostgreSQL内置备份命令pg_basebackup支持服务器端的备份文件压缩,可以选择gzip、LZ4和zstd格式。

  • 支持自定义模块归档能力,减少使用Shell命令的成本。

开发人员特色功能

  • 支持SQL标准的MERGE命令。允许编写包含INSERTUPDATEDELETE操作的SQL语句。

  • 增加了使用正则表达式的新函数用于检查字符串,相关函数如下:regexp_count()regexp_instr()regexp_like()regexp_substr()

  • 增加range_agg函数,用于聚合Multirange数据类型。

  • CREATE VIEW增加security_invoker选项,允许使用访客权限创建视图,而不是视图创建者权限。增加额外的保护,确保视图调用者使用正确的权限处理底层数据。

更多逻辑复制选项

  • 增加逻辑复制灵活性,为Publication引入行筛选和数据列列表,允许您选择从表中复制数据的子集。

  • 增加部分功能简化冲突管理。

    • 增加跳过重新执行冲突事务的能力。

    • 增加在检测到错误时自动停止订阅的能力。

  • 支持在逻辑复制中使用两阶段提交(2PC)。

日志和配置增强

  • 引入JSONLOG日志格式。使用JSON结构输出日志数据,可以在结构化日志系统中处理PostgreSQL日志。

  • 在管理PostgreSQL配置方面,为数据库管理员增加了授予用户更改服务器级配置参数的权限的能力。

  • 增加\dconfig命令,可以在psql命令工具查看配置信息。

其他值得关注的改动

  • 服务器级的统计数据收集至共享内存,优化了统计收集进程以及定期将这些数据写入磁盘的过程。

  • ICU排序作为集群或单个数据库的默认排序规则成为可能。

  • 增加内置扩展pg_walinspect,允许您直接从SQL接口检查WAL日志文件内容。

  • 允许除数据库所有者之外,从 public(或default)模式的数据库中撤销所有账号的CREATE权限。

  • 删除长期被弃用的“独占备份”模式,也删除了PL/Python中对Python 2的支持。

升级指导

建议您升级到PolarDB PostgreSQL版 15版本。升级到PolarDB PostgreSQL版兼容PostgreSQL 15版本意味着您可以与PostgreSQL社区保持同步,获得更多的资源和支持,帮助您解决问题并学习数据库的最佳实践。

PolarDB PostgreSQL版 14版本升级到PolarDB PostgreSQL版 15版本的过程中,大部分的数据类型、内置函数、表列和对象无明显变化,大多数为细节改进。通过逻辑复制等方式(推荐使用DTS工具,详细介绍请参考PolarDB PostgreSQL版间的迁移)可以实现接近100%的兼容性,具体的变化细节如下所示。

说明

PolarDB PostgreSQL版 11升级到PolarDB PostgreSQL版 14中的区别,请参考PolarDB PostgreSQL 14版相对于PolarDB PostgreSQL 11版的变化点

类型

  • 禁止零长度Unicode标识符,例如U&""

  • 防止数字文本有非数字结尾的字符,例如123abc会被解析为123

  • 调整JSON数字文本处理方式,以匹配SQL/JSON标准。现在接受1..1输入,同时不接受非数字结尾,例如1.type()

  • Interval输入的单位分数值大于月份时,四舍五入到最接近的月份,例如1.99 year转换到2 years,而非过去的1 year 11 months

  • 提高Interval与尾随句点解析的一致性。

  • char:更改非ASCII字符的输入输出格式,以八进制展示。

函数与表达式

  • array_to_tsvector():如果传入一个空字符串数组元素,将会产生错误。

  • chr():当提供负参数时,将会产生错误。

  • 因为输出类型为Interval的函数依赖于IntervalStyle,将对应函数标记为stable,而非immutable

  • 增加调整时间间隔函数中的整数溢出检查,受影响的函数是justify_interval()justify_hours()justify_days()

  • 改进计算算法random():即使种子值相同,也会导致random()的结果与之前版本的结果不同。

查询优化

  • Hash_mem_multiplier默认值增加到2.0,允许查询哈希操作比其他操作使用更多的work_mem内存。

  • 防止CREATE OR REPLACE VIEW改变输出列的排序规则。

权限

  • 删除登录角色的对自身成员身份拥有的默认ADMIN OPTION权限。登录角色在没有ADMIN OPTION权限的情况下不可以添加/删除其自身角色的成员。

  • 允许逻辑复制作为订阅的所有者运行 。

  • 阻止对订阅所有者没有SELECT权限的表进行逻辑复制操作 (UPDATE DELETE)。

其他

  • 删除排他备份及相关函数。

  • 删除对Python2的支持。

  • 删除xml_is_well_formed函数。

  • libpq的PQsendQuery()函数不再支持管道模式,可能会导致部分应用程序或者驱动不兼容。

  • 删除过时参数stats_temp_directory

  • EXPLAIN引用会话临时对象的Schema时,将其称为pg_temp,过去Schema名称也会被包含在内。