查看原文
其他

PostgreSQL 17 RC1 发布!与近期PG新闻

冯若航 非法加冯
2024-09-06

PostgreSQL 全球开发组宣布,PostgreSQL 17 的第一个候选版本RC1现已开放下载[1]。作为候选版本,PostgreSQL 17 RC 1 将与 PostgreSQL 17 的初始版本基本相同,但在 PostgreSQL 17 正式发布之前可能会应用一些修复。

PostgreSQL 17 的正式发布计划日期为 2024 年 9 月 26 日



PG相关新闻

近期与 PostgreSQL 相关的新闻包括:


PostgreSQL 17 RC1 发布,有性能评测表明  PG17 写入性能(吞吐量)有非常显著(最高达50%+)的提升。

但是请注意,对于普通用户来说,刚发布的全新大版本不适合立即投入生产。目前 PostgreSQL 17 生态可用的扩展支持尚不完全。建议普通用户在 PostgreSQL 17 扩展支持基本达到 16 目前的状态再正式投入生产。(预计明年年中)


开箱即用的 PostgreSQL 发行版 —— Pigsty 发布了 v3.0.1 版本,提供了 336 个开箱即用的扩展插件与 6 种 PG 可替换内核。v3.0 提供了对 PostgreSQL 17 的支持 —— 包括全新的监控指标与面板。(当然,正式将 PG 17 作为默认大版本,需要等到 17 完全成熟以后)


MongoDB 的 CEO 对 PostgreSQL  “宣战”,要乱拳打死老师傅。当然这种无聊的营销碰瓷就要用霹雳手段及时遏止 —— 请看《MongoDB没有未来:好营销救不了烂芒果

此外基于 PostgreSQL 的 MongoDB 替代组件 —— FerretDB 1.24 发布,FerretDB 提供了 MongoDB 线缆协议仿真并实现了大量 Mongo API。另一个在 Node.js 客户端侧基于 PG 提供 Mongo 仿真的开源项目 PongoDB 发布了 0.13 版本。


TimescaleDB 开始了 2024 年的 PostgreSQL 社区调研,作为一个专门针对 PG 社区的老牌调研,我呼吁中国的 PostgreSQL 积极参与问卷调研,并发出自己的声音: https://www.timescale.com/blog/the-2024-state-of-postgresql-survey-is-now-open/ 。此外,RedGate 也在进行另一个数据库生态的问卷调查。


PostgreSQL SOTA 高可用组件 Patroni 已经升级到 4.0,目前已经在 PGDG YUM 仓库实装,并在 Pigsty v3.0.1 中提供原生部署支持。不过目前 APT 仓库仍然尚未跟进。


由阿里云开源的 PolarDB for PostgreSQL 目前将 15 版本的内核正式发布并开源。上一个发布的版本还是基于 PostgreSQL 11,已经 EOL 进一年,并缺失了一些重要可观测性指标。这个新版本有力的解决了这些痛点。目前 PolarDB 15 尚未提供 RPM  / DEB 包,不过 Pigsty 中提供 PolarDB 11 的原生支持,欢迎试用与尝鲜。





PostgreSQL 17 亮点功能

查询和写入性能改善

PostgreSQL 17 最近的版本与构建,持续致力于整体的系统性能优化。负责回收存储空间的 PostgreSQL Vacuum[4] 进程使用了新的内部数据结构,使得垃圾回收过程的内存使用减少,最高可以减少 20 倍,同时减少了执行所需的时间。此外 Vacuum 进程不再受到 1GB 内存的使用限制,而由 maintenance_work_mem[5] 来控制,这意味着您可以为 Vacuum 进程分配更多资源。

这个版本引入了流式 I/O 接口,使得执行顺序扫描和运行 ANALYZE[6] 的性能有所提高。PostgreSQL 17 还新增了配置参数,可控制 事务、子事务和 multixact 缓冲区[7] 的大小。

PostgreSQL 17 现在可以同时利用 Planner 的统计信息与 公共表表达式 CTE[8](即 WITH 查询[9])结果中的排序顺序,进一步优化这些查询的速度。此外,这个版本显著提高了带有 IN 子句的查询,在使用 B-tree 索引[10] 时的查询执行时间。从这个版本开始,对于那些带有 NOT NULL 约束的列,如果查询中带有冗余的 IS NOT NULL 语句,PostgreSQL 会直接把它优化掉,同理,那些带有 IS NULL 的查询也会直接优化掉,PostgreSQL 17 还支持并行构建 BRIN[11] 索引。

高并发写入类的工作负载,可以显著受益于 PostgreSQL 17 的预写日志(WAL[12])锁管理改进,测试显示,性能提升 最多高达两倍

最后,PostgreSQL 17 添加了更多显式的 SIMD 指令,比如为 bit_count[13] 函数启用 AVX-512 指令支持。


分区和分布式工作负载增强

PostgreSQL 17 的分区管理更为灵活,新增了拆分合并分区的能力,并允许分区表使用 身份列(Identity Column) 和排它约束(Exclude Constraints)。此外,PostgreSQL 外部数据包装器[14]postgres_fdw[15])现在可以将 EXISTS 和 IN 子查询下推到远端服务器,从而提升性能。

PostgreSQL 17 为逻辑复制添加了新功能,使其在高可用架构和大版本升级中更加易用。从 PostgreSQL 17 使用 pg_upgrade[16] 升级到更高版本时,不再需要删除 逻辑复制槽[17] 了,从而避免了升级后需要重新同步数据的麻烦。此外,你还可以控制逻辑复制的 Failover 过程,为高可用性架构中管理 PostgreSQL 提供了更好的可控制性。PostgreSQL 17 还允许逻辑复制的订阅者使用 hash 索引进行查找,并引入了 pg_createsubscriber 命令行工具,用于在使用物理复制的副本从库上创建逻辑复制。


开发者体验

PostgreSQL 17 继续深化了对 SQL/JSON 标准的支持,新增了 JSON_TABLE 功能,可以将 JSON 转换为标准的 PostgreSQL 表,以及 SQL/JSON 构造函数(JSONJSON_SCALARJSON_SERIALIZE)和查询函数(JSON_EXISTSJSON_QUERYJSON_VALUE)。值得注意的是,这些功能最初计划在 PostgreSQL 15 中发布,但出于设计权衡考虑,在 Beta 期间被撤回 —— 这也是我们希望请您在 Beta 期间帮忙测试新功能的原因之一!此外,PostgreSQL 17 为 jsonpath 的实现增添了更多功能,包括将 JSON 类型的值转换为各种不同特定数据类型的能力。

MERGE[18] 命令现在支持 RETURNING 子句了,让您可以在同一条命令中进一步处理修改过的行。您还可以使用新的 merge_action 函数查看 MERGE 命令修改了哪一部分。PostgreSQL 17 还允许使用 MERGE 命令更新视图,并新增了 WHEN NOT MATCHED BY SOURCE 子句,允许用户指定当源中的行没有任何匹配时,应该执行什么操作。

COPY[19] 命令用于高效地从 PostgreSQL 批量加载与导出数据。在 PostgreSQL 17 中,导出大行时的性能最多有两倍的提升。此外,当源编码与目标编码相匹配时,COPY 的性能也有所提升。COPY 新增了一个 ON_ERROR 选项,即使插入行时出现错误也可继续进行。此外在 PostgreSQL 17 中,驱动程序可以利用 libpq API 使用 异步和更为安全的查询取消方法[20]

PostgreSQL 17 引入了内置的排序规则提供程序,该提供程序提供与 C 排序规则类似的排序语义,但编码为 UTF-8 而非 SQL_ASCII。这种新的排序规则提供了不变性保证,确保您的排序结果在不同系统上都不会改变。


安全功能

PostgreSQL 17 新增了一个新的连接参数 sslnegotation,允许 PostgreSQL 在使用 ALPN[21] 时直接进行 TLS 握手,减少一次网络往返。PostgreSQL 会在 ALPN 目录中注册为 postgresql

这个版本引入了新的 EventTrigger 事件 —— 当用户认证时触发。并且在 libpq 中提供了一个新的名为 PQchangePassword 的 API,可以在客户端侧自动对密码取哈希,以防止在服务器中意外记录下明文密码。

PostgreSQL 17 增加了一个新的 预定义角色[22],名为 pg_maintain,赋予用户执行 VACUUMANALYZECLUSTERREFRESH MATERIALIZED VIEWREINDEX 和 LOCK TABLE 的权限, 并确保 search_path 对于 VACUUMANALYZECLUSTERREFRESH MATERIALIZED VIEW 和 INDEX 等维护操作是安全的。最后,用户现在可以使用 ALTER SYSTEM 来设置系统无法识别的未定义配置参数了。


备份与导出管理

PostgreSQL 17 可以使用 pg_basebackup[23] 进行增量备份,并增加了一个新的实用工具 pg_combinebackup[24],用于备份恢复过程中将备份合并。该版本为 pg_dump[25] 新增了一个参数项 --filter,允许您指定一个文件来进一步指定在 dump 过程中要包含或排除哪些对象。


监控

EXPLAIN[26] 命令可以提供有关查询计划和执行详情的信息,现在它新增了两个选项:SERIALIZE 会显示将数据序列化为网络传输形式时的耗时;MEMORY 会报告优化器内存使用情况。此外,EXPLAIN 现在还可以显示花费在 I/O 块读写上的时间。

PostgreSQL 17 标准化了 pg_stat_statements[27] 中 CALL 的参数,减少了频繁调用的存储过程所产生的记录数量。此外,VACUUM 进度报告[28] 现在会显示索引垃圾回收的进度。PostgreSQL 17 还引入了一个新视图,pg_wait_events[29],提供关于等待事件的描述,可以与 pg_stat_activity 共同使用,以便深入了解活动会话出现等待的原因。此外,pg_stat_bgwriter[30] 视图中的一些信息,现在被拆分到新的 pg_stat_checkpointer[31] 视图中了。


其他功能

PostgreSQL 17 还有许多其他新功能与改进,很多改进都可能会对您的用例有所帮助。请参阅发布说明[32]以获取完整的新功能和变更列表:

https://www.postgresql.org/docs/17/release-17.html


错误和兼容性测试

每个 PostgreSQL 版本的稳定性,在很大程度上依赖于诸位 PG社区用户,您可以用你们的工作负载和测试工具来测试即将发布的版本,以便在 PostgreSQL 17 正式发布前发现错误并完成回归。由于这是一个 Beta 版本,针对数据库行为、功能细节和 API 的小改动仍然可能会发生。您的反馈和测试将有助于调整并敲定这些新功能,因此请在近期进行测试。用户测试的质量有助于我们确定何时可以进行最终发布。

PostgreSQL wiki 中公开提供了开放问题[33]列表。您可以使用 PostgreSQL 网站上的此表单报告错误[34]

https://www.postgresql.org/account/submitbug/



References

[1] 下载: https://www.postgresql.org/about/news/postgresql-17-rc1-released-2926/
[2] 发布说明: https://www.postgresql.org/docs/17/release-17.html
[3] Beta 测试流程: https://www.postgresql.org/developer/beta/
[4] Vacuum: https://www.postgresql.org/docs/17/routine-vacuuming.html
[5] maintenance_work_memhttps://www.postgresql.org/docs/17/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM
[6] ANALYZEhttps://www.postgresql.org/docs/17/sql-analyze.html
[7] 事务、子事务和 multixact 缓冲区: https://www.postgresql.org/docs/17/runtime-config-resource.html#GUC-MULTIXACT-MEMBER-BUFFERS
[8] 公共表表达式 CTE: https://www.postgresql.org/docs/17/queries-with.html
[9] WITH 查询: https://www.postgresql.org/docs/17/queries-with.html
[10] B-tree 索引: https://www.postgresql.org/docs/17/indexes-types.html#INDEXES-TYPES-BTREE
[11] BRIN: https://www.postgresql.org/docs/17/brin.html
[12] WAL: https://www.postgresql.org/docs/17/wal-intro.html
[13] bit_counthttps://www.postgresql.org/docs/17/functions-bitstring.html
[14] PostgreSQL 外部数据包装器: https://www.postgresql.org/docs/17/postgres-fdw.html
[15] postgres_fdwhttps://www.postgresql.org/docs/17/postgres-fdw.html
[16] pg_upgradehttps://www.postgresql.org/docs/17/pgupgrade.html
[17] 逻辑复制槽: https://www.postgresql.org/docs/17/logical-replication-subscription.html#LOGICAL-REPLICATION-SUBSCRIPTION-SLOT
[18] MERGEhttps://www.postgresql.org/docs/17/sql-merge.html
[19] COPYhttps://www.postgresql.org/docs/17/sql-copy.html
[20] 异步和更为安全的查询取消方法: https://www.postgresql.org/docs/17/libpq-cancel.html
[21] ALPN: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
[22] 预定义角色: https://www.postgresql.org/docs/17/predefined-roles.html
[23] pg_basebackuphttps://www.postgresql.org/docs/17/app-pgbasebackup.html
[24] pg_combinebackuphttps://www.postgresql.org/docs/17/app-pgcombinebackup.html
[25] pg_dumphttps://www.postgresql.org/docs/17/app-pgdump.html
[26] EXPLAINhttps://www.postgresql.org/docs/17/sql-explain.html
[27] pg_stat_statementshttps://www.postgresql.org/docs/17/pgstatstatements.html
[28] VACUUM 进度报告: https://www.postgresql.org/docs/devel/progress-reporting.html#VACUUM-PROGRESS-REPORTING
[29] pg_wait_eventshttps://www.postgresql.org/docs/17/view-pg-wait-events.html
[30] pg_stat_bgwriterhttps://www.postgresql.org/docs/17/monitoring-stats.html#MONITORING-PG-STAT-BGWRITER-VIEW
[31] pg_stat_checkpointerhttps://www.postgresql.org/docs/17/monitoring-stats.html#MONITORING-PG-STAT-CHECKPOINTER-VIEW
[32] 发布说明: https://www.postgresql.org/docs/17/release-17.html
[33] 开放问题: https://wiki.postgresql.org/wiki/PostgreSQL_17_Open_Items
[34] 报告错误: https://www.postgresql.org/account/submitbug/
[35] Beta 测试: https://www.postgresql.org/developer/beta/
[36] 下载: https://www.postgresql.org/download/
[37] Beta 测试信息: https://www.postgresql.org/developer/beta/
[38] PostgreSQL 17 Beta 发布说明: https://www.postgresql.org/docs/17/release-17.html
[39] PostgreSQL 17 开放问题: https://wiki.postgresql.org/wiki/PostgreSQL_17_Open_Items
[40] 功能矩阵: https://www.postgresql.org/about/featurematrix/
[41] 提交错误: https://www.postgresql.org/account/submitbug/
[42] 在 X/Twitter 上关注 @postgresql: https://twitter.com/postgresql
[43] 捐赠: https://www.postgresql.org/about/donate/


数据库老司机

对 PostgreSQL 与 Pigsty 感兴趣的朋友

欢迎加入 PGSQL x Pigsty 交流群(备注加群)

(这个小助手很懒,请使劲拍打他)



世界上最流行的数据库 PostgreSQL


PostgreSQL正在吞噬数据库世界

PG隆中对,一个PG三个核,一个好汉三百个帮

憋大招,数据库全能王真的要来了。

StackOverflow 2024调研:PostgreSQL已经超神了

PostgreSQL小版本更新,17beta3,12将EOL

PostgreSQL 17 Beta1 发布!牙膏管挤爆了!

为什么PostgreSQL是未来数据的基石?

令人惊叹的PostgreSQL可伸缩性

PostgreSQL is eating the database world

技术极简主义:一切皆用Postgres

PostgreSQL:世界上最成功的数据库

PostgreSQL 到底有多强?

PostgreSQL会修改开源许可证吗?

《黑历史:Mongo》:现由PostgreSQL驱动

PostgreSQL可以替换微软SQL Server吗?

ElasticSearch又重新开源了???

Pigsty v3:助力PostgreSQL进入全盛时代!

谁整合好DuckDB,谁赢得OLAP数据库世界

让PG停摆一周的大会:PGCon.Dev参会记

PGCon.Dev 扩展生态峰会小记 @ 温哥华



开箱即用的 PostgreSQL 数据库发行版 Pigsty


Pigsty v3:海量扩展,可替换内核,RDS服务

Pigsty v2.7:集异璧之大成,扩展尽入彀中

Pigsty v2.6:PostgreSQL 踢馆 OLAP

Pigsty v2.5.1发布:PG16能打了吗?

Pigsty v2.5 发布:Ubuntu/Debian与监控改版/新扩展

Pigsty 2.4:PG16支持,RDS监控与新扩展!

Pigsty v2.3.1:HNSW版PGVECTOR来了!

Pigsty v2.3 发布:应用生态丰富

Pigsty v2.2 发布 —— 监控系统大升级


国产数据库专辑


数据库真被卡脖子了吗?

国产数据库到底能不能打?

国产数据库是大炼钢铁吗?

分布式数据库是伪需求吗?

EL系操作系统发行版哪家强?

基础软件到底需要什么样的自主可控?

中国对PostgreSQL的贡献约等于零吗?


其他数据库


MongoDB没有未来:“好营销”救不了烂芒果

《黑历史:Mongo》:现由PostgreSQL驱动

PostgreSQL可以替换微软SQL Server吗?

ElasticSearch又重新开源了???

Redis不开源是“开源”之耻,更是公有云之耻

RDS阉掉了PostgreSQL的灵魂

PG生态新玩家ParadeDB

DBA会被云淘汰吗?


MySQL安魂九霄,PostgreSQL驶向云外

MySQL新版恶性Bug,表太多就崩给你看!

Oracle还能拯救MySQL吗?

Oracle最终还是杀死了MySQL!

MySQL性能越来越差,Sakila将何去何从?

用PG的开发者,年薪比MySQL多赚四成?

MySQL的正确性为何如此拉垮?

如何看待 MySQL vs PGSQL 直播闹剧

驳《MySQL:这个星球最成功的数据库》

把数据库放入Docker是一个好主意吗?

数据库应该放入K8S里吗?

向量数据库凉了吗?

向量是新的JSON 


点一个关注 ⭐️,精彩不迷路


继续滑动看下一个
非法加冯
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存