PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量
得益于全球的开发者贡献,PostgreSQL 已成长为一款拥有众多全球用户和贡献者、成熟稳定的开源数据库。2024 年 5 月 23 日,PostgreSQL 全球开发组宣布,PostgreSQL 17 的首个 Beta 版本现已开放下载。本次新版本带来了众多惊喜。值得一提的是,本次发布中,酷克数据 HashData 研发团队参与了多出核心代码贡献,为 PostgreSQL 项目与社区提供了有力支持。
PostgreSQL 17 功能亮点
查询和写入性能优化
PostgreSQL 17(以下称“PG17”)致力于优化和提升整体的系统性能。负责回收存储空间 Vacuum 进程采用了新数据结构,使得垃圾回收过程的内存使用减少,最高可以减少 20 倍,并缩短执行时间。 Vacuum 进程不再受 1GB 内存限制,由 maintenance_work_mem
来控制。
引入流式 I/O 接口,提升了顺序扫描和运行 ANALYZE
的性能。新增配置参数,可控制事务、子事务和 multixact 缓冲区大小。
PG17 利用 Planner 统计信息和 CTE(即 WITH
查询)结果中的排序顺序,进一步优化查询速度。对于包含 IN 子句和 B-tree 索引的查询,执行时间得到显著缩短。对于带有 NOT NULL 约束的列,PostgreSQL 能够自动优化冗余的 IS NOT NULL 语句,同样,对于 IS NULL 的查询也进行了优化。此外,支持并行构建 BRIN 索引。
在高并发写入场景下,PG17 通过改进预写日志(WAL)锁管理,实现了高达两倍的性能提升。最后,新版本还引入了更多显式的 SIMD 指令,如 AVX-512,为 bit_count 等函数提供了硬件加速支持。
分区和分布式工作负载增强
PG17 的分区管理更为灵活,支持拆分与合并分区,并允许分区表使用身份列(Identity Column) 和排它约束(Exclude Constraints)。同时,postgres_fdw
支持将EXISTS
和IN
子查询下推至远端服务器提升性能。
PG17 为逻辑复制添加了新功能,简化了高可用架构和升级流程。PG17 使用 pg_upgrade
升级到更高版本时,无需删除复制槽。支持 Failover 控制,为高可用性架构中管理 PostgreSQL 提供了更好的可控制性。PG17 还允许逻辑复制的订阅者使用 hash
索引进行查找,并引入了 pg_createsubscriber
命令行工具,用于在使用物理复制的副本从库上创建逻辑复制。
开发者体验
PG17 深化了 SQL/JSON 支持,新增了 JSON_TABLE
功能,支持将 JSON 转换为标准 PostgreSQL 表,以及 SQL/JSON 构造函数(JSON
、JSON_SCALAR
、JSON_SERIALIZE
)和查询函数(JSON_EXISTS
、JSON_QUERY
、JSON_VALUE
)。此外,PG17 为 jsonpath
的实现增添了更多功能,包括将 JSON 值转换为各种不同特定数据类型。
MERGE
命令现支持 RETURNING
子句,便于处理修改后的行。merge_action
函数可识别 MERGE
命令的修改部分。PG17 还允许使用 MERGE
命令更新视图,并新增 WHEN NOT MATCHED BY SOURCE
子句,以指定当源行无匹配时提供操作。
COPY
用于从 PostgreSQL 高效批量加载和导出数据,在 PG17 中,导出大行时的性能最多有两倍的提升。当源与目标编码匹配时,COPY
性能亦有所提升。COPY
新增 ON_ERROR
选项,允许在插入错误时继续执行。PG17 还支持使用 libpq API 使用异步和更为安全的查询取消方法。
PG17 引入内置的排序规则提供程序,该提供程序提供与 C
排序规则类似的排序语义,但编码为 UTF-8
而非 SQL_ASCII
,提供不变性保证,确保排序结果跨系统一致。
安全功能
PG17 引入了新连接参数 sslnegotiation
,允许 PostgreSQL 在使用 ALPN 时直接进行 TLS 握手,减少一次网络往返。同时在 ALPN 注册为 postgresql
。此版本还添加了用户认证时触发的新 EventTrigger,以及在 libpq 中新增 PQchangePassword
API,实现客户端自动对密码取哈希,提升安全性。另外,新增了预定义角色 pg_maintain
,赋予用户执行多种维护权限,并确保 search_path 在执行维护操作时的安全性。最后,支持使用 ALTER SYSTEM 设置系统无法识别的未定义的配置参数。
备份与导出管理
PG17 可以使用 pg_basebackup
进行增量备份,并增加了一个新的实用工具 pg_combinebackup
,用于备份恢复过程中将备份合并。该版本为 pg_dump
新增了一个参数项 --filter
,允许指定一个文件来进一步指定在 dump 过程中要包含或排除哪些对象。
监控
EXPLAIN
命令现增加SERIALIZE
和MEMORY
选项,分别展示数据序列化耗时和优化器内存使用情况。同时,EXPLAIN
还能显示 I/O 读写耗时。PostgreSQL 17 统一了pg_stat_statements
中CALL
的参数,减少了频繁调用的存储过程记录数。此外,VACUUM
进度报告现在会显示索引垃圾回收的进度。PG17 还引入了一个新视图,pg_wait_events
,提供关于等待事件的描述,可以与 pg_stat_activity
共同使用,以便深入了解活动会话出现等待的原因。此外,pg_stat_bgwriter
视图中的一些信息,现在被拆分到新的 pg_stat_checkpointer
视图中了。
HashData 研发团队贡献核心力量
HashData 研发团队一直活跃于 PostgreSQL 社区。在 PostgreSQL 15、16 等多个版本中,都能看到 HashData 研发团队以代码编写、审核、检测等方式参与了数十项开源贡献,为 PostgreSQL 性能改进和提升提供了有力支持。在最新发布的 PG17 版本中,HashData 研发团队也参与了几项重要贡献:
示例一:极具实用性的全新 feature,极大地提升了批量导入数据的便捷性
HashData 研发团队贡献信息
值得一提的是,这是 Hashdata 第一次有 feature 进入社区代码,意味着我们的技术能力得到了更广泛的认可与关注。COPY FROM
命令是 PostgreSQL 中用于批量导入数据的强大工具。在数据处理过程中,根据数据和用户定义情况,某些列可为空值。用户可以为这些列设置默认选项,强制为空或者不为空。以往,用户需要逐一设置每一列的空值设置,这在处理大量列(例如,PostgreSQL 默认支持的上限是 1600 列)时变得极为繁琐。
全新的 feature 为 COPY FROM 命令增加FORCE_NULL *
和FORCE_NOT_NULL *
选项,允许用户轻松的为数据的所有列设置强制为空,或不为空,极大地提高了数据导入的效率。
示例二:代码重构,提升了代码的简洁性和执行的高效性
HashData 研发团队贡献信息
PostgreSQL 支持 LIMIT、FETCH 等语句,这些语句在内部通过不同的枚举选项来实现。然而,HashData 团队在深入阅读和理解代码后,发现LIMIT_OPTION_DEFAULT
这一选项实际上是多余的,PostgreSQL 的解析树已经能够充分表达相应的逻辑。经过严格的验证测试,清理了这部分不必要的代码,提升了 PostgreSQL 代码的简洁性和执行的高效性。
此外,HashData 的研发团队还积极参与了代码的 Review 工作,凭借严谨的态度和专业的技能,为 PostgreSQL 新版本的稳定性和性能提供了有力保障。
结语
在全球开源社区的共同努力下,PostgreSQL 已经发展成为一款功能强大、稳定可靠的开源数据库,广泛应用于各行各业。随着本次 beta 版本的发布,我们看到了 PostgreSQL 17 在性能优化、功能增强和安全提升等方面的显著进步。酷克数据 HashData 研发团队饮水思源,通过代码贡献、PG 技术讲解等方式,不断以开源精神和技术实力回馈社区。
凭借团队对技术创新的不懈追求,酷克数据打造了一款面向分析和 AI 场景的下一代统一型开源数据库产品 CloudberryDB,搭载了 PostgreSQL 14.4 内核。CloudberryDB 既能满足单机本地快捷部署,也能通过插件自由扩展为云原生架构,具备高弹性、高并发、湖仓一体化、扩缩容灵活等优势。同时,CloudberryDB 支持丰富的数据类型和数仓/AI 混合负载,可开展 SQL 分析、机器学习、全文检索、HTAP 等任务,通过数据存储加密、联合⾝份验证等技术手段,帮助企业更方便地自建高效稳定的数据底座。
CloudberryDB 灵活部署形态
CloudberryDB 产品兼容生态
CloudberryDB 正在以国际标准、高点定位、全球眼光的运营理念,构建开放、友好、中立的开源社区。我们也期待有更多的开源爱好者加入我们,为开源世界贡献我们的一份力量。
CloudberryDB GitHub 地址:https://github.com/cloudberrydb/cloudberrydb,欢迎大家访问体验。
参考链接:
1、PG 17 Beta1 版发布官方新闻:https://www.postgresql.org/about/news/postgresql-17-beta-1-released-2865/
2、PG 17 Beta1 版发布说明:https://www.postgresql.org/docs/17/release-17.html
3、PG 17 Beta1 版下载地址:https://www.postgresql.org/download/
评论