PostgreSQL 全球开发组 发布于2024-05-23
原文链接:https://www.postgresql.org/about/news/postgresql-17-beta-1-released-2865/
PostgreSQL 全球开发小组宣布,PostgreSQL 17 的第一个测试版本现已可供下载。此版本包含 PostgreSQL 17 正式发布时将提供的所有功能的预览,但测试期间版本的某些细节可能会发生变化。
您可以在发行说明中找到有关 PostgreSQL 17 的所有功能和更改的信息:
https://www.postgresql.org/docs/17/release-17.html
本着开源 PostgreSQL 社区的精神,我们强烈建议您在您的系统上测试 PostgreSQL 17 的新功能,以帮助我们消除可能存在的错误或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 17 Beta 1,但我们鼓励您找到针对此测试版运行典型应用程序工作负载的方法。
您的测试和反馈将帮助社区确保 PostgreSQL 17 版本符合我们的标准,即提供世界上最先进的开源关系数据库的稳定、可靠版本。请阅读有关我们的beta 测试流程以及您如何做出贡献的更多信息:
https://www.postgresql.org/developer/beta/
PostgreSQL 17 功能亮点
查询和操作性能改进
PostgreSQL 17 以最新版本为基础,并继续提高整个系统的性能。Vacuum是PostgreSQL负责回收存储的进程,它有一个新的内部数据结构,可以减少20倍的内存,同时完成其工作的总时间也有所改善。此外,vacuum 进程不再对其可使用的内存有限制(由maintenance_work_mem控制),让您可以选择将更多资源应用于 vacuum 操作。
此版本引入了流 I/O 接口,并且可以在执行顺序扫描和运行ANALYZE时显示性能改进。PostgreSQL 17 还包括可以控制事务、子事务和多事务缓冲区的可扩展性的配置参数。
PostgreSQL 17 现在可以同时使用计划器统计信息和通用表表达式(WITH查询)的排序顺序来进一步优化查询并帮助它们更快地执行。此外,此版本还显著缩短了使用IN带有B 树索引的子句查询的执行时间。从这个版本开始,PostgreSQL可以在有NOT NULL约束的列上删除冗余的IS NOT NULL语句,并且不再需要在包含IS NOT NULL子句的列上执行查询。现在,从PostgreSQL 17开始,您可以为BRIN索引使用并行索引构建。
具有高度并发变化的工作负载可以从PostgreSQL 17中受益,因为它改进了预写日志(write-ahead log, WAL)锁的管理方式,一些测试显示性能提高了2倍。
最后,PostgreSQL 17增加了更多显式的SIMD指令,包括对bit_count函数的AVX-512支持。
分区和分布式工作负载增强
PostgreSQL 17 为分区管理带来了更大的灵活性,增加了拆分和合并分区的功能,并增加了对分区表的标识列和排除约束的支持。此外,PostgreSQL 外部数据封装器( postgres_fdw) 可以从带有EXISTS和IN子查询的查询可以通过推送到远程服务器获得性能提升。
PostgreSQL 17增加了逻辑复制的新功能,使其在高可用性工作负载和升级时更容易使用。从PostgreSQL 17升级到新版本开始,在使用pg_upgrade时不再需要删除逻辑复制槽,从而避免在升级后重新同步数据。此外,这个版本还引入了逻辑复制的故障转移控制,为在高可用性环境中管理PostgreSQL数据库提供了更多的控制。PostgreSQL 17还允许逻辑复制订阅端使用哈希索引进行查找,并引入了pg_createsubscriber命令行工具,用于在使用物理复制的副本上添加逻辑复制。
开发人员体验
PostgreSQL 17继续建立在SQL/JSON标准之上,增加了对JSON_TABLE特性的支持,可以将JSON转换为标准的PostgreSQL表和SQL/JSON构造函数(JSON, JSON_SCALAR, JSON_SERIALIZE)和查询函数(JSON_EXISTS, JSON_QUERY, JSON_VALUE)。值得注意的是,这些特性原本是计划在PostgreSQL 15发布的,但由于设计方面的考虑,我们在测试期间恢复了这些特性,这也是我们要求您在测试期间帮助我们测试这些特性的原因之一!此外,PostgreSQL 17在jsonpath实现中增加了更多的功能,以及将JSON值转换为不同数据类型的能力。
MERGE命令现在支持RETURNING子句,允许您进一步处理修改后的行。您还可以看到MERGE命令的哪个部分使用新的merge_action函数修改了行。PostgreSQL 17还允许您使用MERGE命令更新视图,并添加了WHEN NOT MATCHED BY SOURCE子句,以便您在源行不满足条件时,应执行的操作。
COPY用于有效地从PostgreSQL批量加载和导出数据,在PostgreSQL 17中,当导出大行的时候,您可能会看到高达2倍的性能提升。此外,当源编码与目标编码匹配时,COPY改进了性能,并且有一个新的选项ON_ERROR,即使插入一行出错,也可以继续复制。PostgreSQL 17驱动程序还可以提供了使用libpq API对异步和更安全的查询取消方式。
PostgreSQL 17包括一个内置的排序规则提供程序,它提供了与C排序类似的排序语义,使用UTF-8编码而不是SQL_ASCII。这个新的排序规则提供了不变性保证,确保您排序的结果在不同系统中不会有改变。
安全功能
PostgreSQL 17增加了一个新的连接参数sslnegotiation,它允许PostgreSQL在使用ALPN时直接执行TLS握手,从而消除了网络往返。PostgreSQL在ALPN目录下注册为postgresql 。
这个版本引入了在身份验证期间执行的事件触发器,并且在libpq中包含了一个名为PQchangePassword的新API,它可以自动对客户端的密码进行散列,以防止意外的明文登录到服务器。
PostgreSQL 17增加了一个新的预定义角色pg_maintenance,赋予用户对所有关系执行VACUUM, ANALYZE, CLUSTER, REFRESH MATERIALIZED VIEW, REINDEX和LOCK TABLE的权限。此版本还确保了搜索路径对于VACUUM、ANALYZE、CLUSTER、REFRESH MATERIALIZED VIEW和INDEX等维护操作是安全的。最后,用户现在可以使用ALTER SYSTEM为无法识别的自定义服务器变量设置值。
备份和导出管理
PostgreSQL 17引入了使用pg_basebackup执行增量备份的功能,并添加了一个名为pg_combinebackup的新实用程序,用于备份恢复过程的一部分。这个版本为pg_dump添加了一个名为--filter的新标志,允许您指定一个文件,该文件包含有关在转储中包含/排除哪些对象的指令。
监控
EXPLAIN命令提供有关查询计划和执行的信息,它增加了两个新选项:1)SERIALIZE-显示转换数据以进行网络传输所需的时间;2)MEMORY-报告优化器内存使用情况。此外,EXPLAIN现在可以显示I/O块读和写所花费的时间。
PostgreSQL 17规范了pg_stat_statements中CALL的参数,减少了频繁调用的存储过程的条目数量。此外,VACUUM进度报告现在显示vacuuming indexes的进度。PostgreSQL 17还引入了一个新的视图pg_wait_events,它提供了关于等待事件的描述,并且可以与pg_stat_activity结合使用,以便更深入地了解活动会话等待的原因。此外,pg_stat_bgwriter视图中的一些信息现在被拆分到新的pg_stat_checkpointer视图中。
附加功能
PostgreSQL 17 中添加了许多其他新功能和改进。其中许多功能可能对您的用例也有帮助。请参阅 发行说明以获取新功能和更改功能的完整列表:
https://www.postgresql.org/docs/17/release-17.html
测试错误和兼容性
每个PostgreSQL版本的稳定性很大程度上取决于您,社区,用您的工作负载和测试工具来测试即将到来的版本,以便在PostgreSQL 17正式发布之前找到错误和回归。由于这是一个测试版,对数据库行为、特性细节和api的微小更改仍然是可能的。您的反馈和测试将有助于确定新功能的最终调整,所以请在不久的将来进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。
PostgreSQL wiki 中公开提供了 未解决问题列表。您可以使用 PostgreSQL 网站上的此表单报告错误:
https://www.postgresql.org/account/submitbug/
Beta 计划
这是版本 17 的第一个 Beta 版本。PostgreSQL 项目将根据测试需要发布其他 Beta 版本,然后发布一个或多个候选版本,直到 2024 年 9 月/10 月左右发布最终版本。有关更多信息,请参阅Beta 测试 页面。
链接
下载:https://www.postgresql.org/download/
Beta 测试信息:https://www.postgresql.org/developer/beta/
PostgreSQL 17 Beta 版本说明:https://www.postgresql.org/docs/17/release-17.html
PostgreSQL 17 未解决的问题:https://wiki.postgresql.org/wiki/PostgreSQL_17_Open_Items
功能列表:https://www.postgresql.org/about/featurematrix/
提交 Bug:https://www.postgresql.org/account/submitbug/
在推特上关注@postgresql:https://twitter.com/postgresql
捐赠:https://www.postgresql.org/about/donate/






