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