PolarDB PostgreSQL版兼容PostgreSQL 17的版本正式发布上线。PostgreSQL 17版本通过性能提升、运维简化和功能扩展,进一步提升数据库使用的体验。
版本介绍
在社区PostgreSQL 17基础上,PolarDB还支持一些独有的功能,例如时空引擎Ganos,全局计划缓存,GBK/GB18030 字符集等。在PolarDB PostgreSQL版 17的第一个发布版本中,即支持以下插件:hll,log_fdw,mysql_fdw,pase,pg_bigm,pg_cron,pg_jieba,pg_repack,pg_similarity,pgtap,pgvector,pldebugger,prefix,varbitx,zhparser,ganos。
同时PolarDB进行了深入的性能优化,例如通过指令集优化(SIMD/原子操作)、系统级优化(PGO/BOLT/LTO)和IO性能优化等手段实现深入性能优化。
相关文档:PostgreSQL 17社区发布公告。
发布时间
北京时间2025年4月3日
费用说明
支持包年包月和按量计费两种计费模式,可叠加计算包、存储包使用,提供灵活的计费选择。计费详情请参见产品计费。
关键提升
系统级性能提升
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构造函数(
JSON,JSON_SCALAR,JSON_SERIALIZE)和查询函数(JSON_EXISTS,JSON_QUERY,JSON_VALUE),为开发者提供更多与JSON数据交互的方式。增加更多的 JSONPath表达式,重点是将JSON数据转换为原生PostgreSQL数据类型,包括数值、布尔值、字符串和日期/时间类型。
PostgreSQL 17为MERGE命令添加了更多功能,包括用于条件更新的
RETURNING子句和更新视图的能力。PostgreSQL 17在批量加载和数据导出方面增加了新功能,包括使用COPY命令导出大行时性能提升高达2倍。当源编码和目标编码匹配时,
COPY性能也有所提升,并且引入一个新选项ON_ERROR,允许在插入错误时继续导入。PostgreSQL 17版本扩展了管理分区数据和分布在远程PolarDB PostgreSQL版集群上的数据的功能。该版本支持在分区表上使用身份列和排除约束。此外,PostgreSQL外部数据封装器(postgres_fdw)支持将
EXISTS和IN子查询下推到远程服务器以进行更高效的查询处理。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块读取和写入花费的时间,并包括两个新选项:
SERIALIZE和MEMORY,用于查看网络传输的数据转换所花费的时间以及使用了多少内存。支持查看索引清理的进度,并添加
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 16与PostgreSQL 15区别、PostgreSQL 15与PostgreSQL 14区别和PolarDB PostgreSQL 14版相对于PolarDB PostgreSQL 11版的变化点。
类型
限制
ago只出现在INTERVAL值的末尾。禁止空INTERVAL单位多次出现。
视图
更新
pgrowlocks锁模式输出标签。将Share改为For Share,Key Share改为For Key Share。更新两个WAL文件名函数的文件边界处理。
pg_walfile_name()和pg_walfile_name_offset()函数在PostgreSQL 17之前版本对位于文件边界的LSN返回前一个段号,PostgreSQL 17版本返回当前段号。删除
information_schema的element_types.domain_default字段。重命名
pg_stat_statements的I/O块读写时间统计列。blk_read_time改为shared_blk_read_time,blk_write_time改为shared_blk_write_time。更新统计目标列的默认值表示方式。
pg_attribute.attstattarget和pg_statistic_ext.stxstattarget用NULL表示默认统计目标。重命名本地化相关列名。
pg_collation.colliculocale改为colllocale,pg_database.daticulocale改为datlocale。重构VACUUM进度统计列。
max_dead_tuples改为max_dead_tuple_bytes,num_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、REINDEX或VACUUM)执行不安全访问。对于引用非默认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。