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

更新时间:2025-04-03 09:26:00

PolarDB PostgreSQL兼容PostgreSQL 17的版本正式发布上线。PostgreSQL 17版本通过性能提升、运维简化和功能扩展,进一步提升数据库使用的体验。

版本介绍

在社区PostgreSQL 17基础上,PolarDB还支持一些独有的功能,例如时空引擎Ganos,全局计划缓存,GBK/GB18030 字符集等。在PolarDB PostgreSQL 17的第一个发布版本中,即支持以下插件:hlllog_fdwmysql_fdwpasepg_bigmpg_cronpg_jiebapg_repackpg_similaritypgtappgvectorpldebuggerprefixvarbitxzhparserganos

同时PolarDB进行了深入的性能优化,例如通过指令集优化(SIMD/原子操作)、系统级优化(PGO/BOLT/LTO)和IO性能优化等手段实现深入性能优化。

说明

发布时间

北京时间202543

费用说明

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

关键提升

系统级性能提升

  • Vacuum进程内存消耗优化:Vacuum进程对于PostgreSQL数据库的健康运行至关重要,其执行需要消耗集群资源。PostgreSQL 17引入新的Vacuum内部内存结构用于Vacuum操作,最高可以减少20倍内存消耗。不仅提高Vacuum的执行速度,还减少了对共享资源的使用,从而为工作负载腾出更多资源。

  • I/O层的性能优化PostgreSQL 17改进WAL日志处理,高并发工作负载的写入吞吐量提升最多高达2倍。此外,新的流式I/O接口加快了顺序扫描(读取表中所有数据)和ANALYZE更新查询规划器统计信息的速度。

  • 查询优化PostgreSQL 17改进了使用B-tree索引(PostgreSQL中的默认索引方法)的IN子句查询的性能。此外,该版本支持并行构建BRIN索引。PostgreSQL 17引入多个查询规划方面的改进,包括对NOT NULL约束的优化以及对公共表表达式(WITH查询)的改进。该版本增加了更多的SIMD(单指令/多数据)支持以加速计算,包括使用AVX-512加速bit_count函数。

开发者体验

  • PostgreSQL第一个添加JSON支持的关系型数据库(2012年),在PostgreSQL 17进一步完善SQL/JSON标准的实现。

    • 引入JSON_TABLE,允许开发者将JSON数据转换为标准的PostgreSQL表。

    • 支持SQL/JSON构造函数(JSONJSON_SCALARJSON_SERIALIZE)和查询函数(JSON_EXISTSJSON_QUERYJSON_VALUE),为开发者提供更多与JSON数据交互的方式。

    • 增加更多的 JSONPath表达式,重点是将JSON数据转换为原生PostgreSQL数据类型,包括数值、布尔值、字符串和日期/时间类型。

  • PostgreSQL 17MERGE命令添加了更多功能,包括用于条件更新的RETURNING子句和更新视图的能力。

  • PostgreSQL 17在批量加载和数据导出方面增加了新功能,包括使用COPY命令导出大行时性能提升高达2倍。当源编码和目标编码匹配时,COPY性能也有所提升,并且引入一个新选项ON_ERROR,允许在插入错误时继续导入。

  • PostgreSQL 17版本扩展了管理分区数据和分布在远程PolarDB PostgreSQL集群上的数据的功能。该版本支持在分区表上使用身份列和排除约束。此外,PostgreSQL外部数据封装器(postgres_fdw)支持将EXISTSIN子查询下推到远程服务器以进行更高效的查询处理。

  • PostgreSQL 17支持一个内置的、跨平台的、保证不可变的排序规则提供程序。该程序提供类似于C排序规则的排序语义,但使用的是UTF-8编码而非SQL_ASCII。通过使用这个新的排序规则提供程序,可以确保无论PostgreSQL运行在哪,基于文本的查询都能返回相同的排序结果。

逻辑复制增强

逻辑复制用于在许多场景下实时流式传输数据。在PostgreSQL 17版本之前,执行主版本升级的用户必须删除逻辑复制槽,这需要在升级后重新同步订阅者的数据。从该版本开始,用户无需删除逻辑复制槽,从而简化使用逻辑复制时的升级过程。

PostgreSQL 17包含了对逻辑复制的故障切换控制,使其在高可用环境中更加可靠。此外,该版本引入pg_createsubscriber命令行工具,用于在使用物理复制的副本从库上创建逻辑复制。

安全性和操作管理选项

  • PostgreSQL 17进一步扩展了用户管理其数据库系统整个生命周期的方式。PolarDB PostgreSQL引入了一个新的TLS选项sslnegotiation,允许用户在使用ALPN时直接进行TLS握手(在ALPN目录中注册为postgresql)。

  • PostgreSQL 17新增pg_maintain预定义角色,该角色授予用户执行维护操作的权限。

  • PostgreSQL 17的原生PostgreSQL备份工具pg_basebackup支持增量备份,并添加pg_combinebackup工具重建完整备份。此外,pg_dump增加新选项--filter,允许在生成转储文件时选择要包含的对象。

  • PostgreSQL 17还增强了监控和分析功能。

    • EXPLAIN现在支持显示本地I/O块读取和写入花费的时间,并包括两个新选项:SERIALIZEMEMORY,用于查看网络传输的数据转换所花费的时间以及使用了多少内存。

    • 支持查看索引清理的进度,并添加pg_wait_events系统视图,结合pg_stat_activity视图可以更深入了解活动会话等待原因。

升级指导

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

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

说明

此处仅为PolarDB PostgreSQL 17版本与PolarDB PostgreSQL 16版本区别。其他PolarDB PostgreSQL版本升级到PolarDB PostgreSQL 16中的区别,请参见PostgreSQL 16PostgreSQL 15区别PostgreSQL 15PostgreSQL 14区别PolarDB PostgreSQL 14版相对于PolarDB PostgreSQL 11版的变化点

类型

  • 限制ago只出现在INTERVAL值的末尾。

  • 禁止空INTERVAL单位多次出现。

视图

  • 更新pgrowlocks锁模式输出标签。将Share改为For ShareKey Share改为For Key Share

  • 更新两个WAL文件名函数的文件边界处理。pg_walfile_name()pg_walfile_name_offset()函数在PostgreSQL 17之前版本对位于文件边界的LSN返回前一个段号,PostgreSQL 17版本返回当前段号。

  • 删除information_schemaelement_types.domain_default字段。

  • 重命名pg_stat_statementsI/O块读写时间统计列。blk_read_time改为shared_blk_read_timeblk_write_time改为shared_blk_write_time

  • 更新统计目标列的默认值表示方式。pg_attribute.attstattargetpg_statistic_ext.stxstattargetNULL表示默认统计目标。

  • 重命名本地化相关列名。pg_collation.colliculocale改为colllocalepg_database.daticulocale改为datlocale

  • 重构VACUUM进度统计列。max_dead_tuples改为max_dead_tuple_bytesnum_dead_tuples改为num_dead_item_ids,新增dead_tuple_bytes字段。

  • 重命名SLRU相关统计视图列。pg_stat_slru视图列及pg_stat_reset_slru()参数名同步变更。

函数与表达式

在维护操作中使用安全Search_path的函数变更,防止维护操作(如ANALYZE、CLUSTER、CREATE INDEX、CREATE MATERIALIZED VIEW、REFRESH MATERIALIZED VIEW、REINDEXVACUUM)执行不安全访问。对于引用非默认Schema的表达式索引和物化视图所使用的函数,必须在创建函数时明确指定Search_path。

权限

  • 更新SET SESSION AUTHORIZATION对初始会话用户超级权限的处理。新行为基于执行SET SESSION AUTHORIZATION命令时会话用户的超级权限状态,而非连接时的状态。

  • 移除模拟按数据库用户的功能(db_user_namespace特性,极少被使用)。

其他

  • 移除服务器参数old_snapshot_threshold。该参数允许Vacuum移除可能仍对运行中事务可见的行,若后续访问会导致snapshot too old错误。

  • 移除adminpack扩展。该扩展已被终止支持的pgAdmin III使用。

  • 移除服务器参数trace_recovery_messages

  • 本页导读 (1)
  • 版本介绍
  • 发布时间
  • 费用说明
  • 关键提升
  • 系统级性能提升
  • 开发者体验
  • 逻辑复制增强
  • 安全性和操作管理选项
  • 升级指导
  • 类型
  • 视图
  • 函数与表达式
  • 权限
  • 其他