PostgreSQL 全球开发小组宣布,PostgreSQL 17 的第一个测试版本现已 可供下载 。此版本包含 PostgreSQL 17 正式发布时将提供的所有功能的预览,但测试期间版本的某些细节可能会发生变化。
#PG培训#PG考试#postgresql培训#postgresql考试#postgresql认证
您可以在发行说明 中找到有关 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 以最新版本为基础,并继续提高整个系统的性能。
负责回收存储的 PostgreSQL 进程
Vacuum
1GB
具有新的内部数据结构,可将内存使用量减少 20 倍,同时缩短了完成工作所需的总体时间。此外,vacuum 进程不再限制其可使用的内存(由 控制
maintenance_work_mem
),让您可以选择将更多资源应用于 vacuum 操作。
此版本引入了流 I/O 接口,在执行顺序扫描和运行时可以显示性能改进
ANALYZE
。PostgreSQL 17 还包括可以控制
事务、子事务和多事务缓冲区
的可扩展性的配置参数。
PostgreSQL 17 现在可以使用计划器统计信息和公用表表达式
(
WITH
查询
)的排序顺序
来进一步优化这些查询并帮助它们更快地执行。此外,此版本还显著缩短了使用
IN
带有
B 树索引
的子句的查询的执行时间。从此版本开始,PostgreSQL 可以
IS NOT NULL
从具有约束的列上删除冗余语句,并且不再需要对包含
列子句的
NOT NULL
查询进行处理
。现在从 PostgreSQL 17 开始,您可以为
BRIN
索引使用并行索引构建。
IS NULL
IS NOT NULL
具有高度并发更改的工作负载可以从 PostgreSQL 17 中受益,因为它改进了 预写日志 ( 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 还允许逻辑复制订阅者使用
hash
索引进行查找,并引入了
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 安装在什么系统上运行,排序的返回值都不会改变。
安全功能
PostgreSQL 17 添加了一个新的连接参数,它允许 PostgreSQL 在使用
ALPN
sslnegotiation
时执行直接 TLS 握手,从而消除网络往返。PostgreSQL
在 ALPN 目录中
注册为。
postgresql
此版本引入了在身份验证期间执行的事件触发器,并在 libpq 中包含了一个新的 API,可
PQchangePassword
在客户端自动对密码进行哈希处理,以防止意外在服务器中以纯文本形式登录。
PostgreSQL 17 添加了一个
名为 的新
预定义角色
,该角色
pg_maintain
授予用户
在所有关系上执行
VACUUM
、
ANALYZE
、
、
和 的权限。此版本还确保 可以安全地执行
、
CLUSTER
、
和
等
维护操作
。最后,用户现在可以使用
来设置无法识别的自定义服务器变量的值。
REFRESH MATERIALIZED VIEW
REINDEX
LOCK TABLE
search_path
VACUUM
ANALYZE
CLUSTER
REFRESH MATERIALIZED VIEW
INDEX
ALTER SYSTEM
备份和导出管理
PostgreSQL 17 引入了使用 执行增量备份的功能
pg_basebackup
,并添加了一个新的实用程序,称为
pg_combinebackup
,用作备份恢复过程的一部分。此版本为 添加了一个新的标志,称为
pg_dump
,
--filter
可让您指定一个文件,其中包含有关从转储中包含/排除哪些对象的说明。
监控
该
EXPLAIN
命令提供有关查询计划和执行的信息,并添加了两个新选项:
SERIALIZE
,显示将数据转换为网络传输所需的时间,以及
MEMORY
,报告优化器内存使用情况。此外,
EXPLAIN
现在可以显示 I/O 块读取和写入所花费的时间。
CALL
PostgreSQL 17 规范化了中
的参数
pg_stat_statements
,减少了频繁调用的存储过程的条目数。此外,
VACUUM
进度报告
现在显示清理索引的进度。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 正式发布之前发现错误和回归问题。由于这是 Beta 版,因此仍有可能对数据库行为、功能细节和 API 进行微小更改。您的反馈和测试将有助于确定新功能的最终调整,因此请在不久的将来进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。
PostgreSQL wiki 中公开提供了 未解决问题 列表。您可以 使用 PostgreSQL 网站上的此表单 报告错误:
https://www.postgresql.org/account/submitbug/
Beta 计划
这是版本 17 的第一个 Beta 版本。PostgreSQL 项目将根据测试需要发布其他 Beta 版本,然后发布一个或多个候选版本,直到 2024 年 9 月/10 月左右发布最终版本。有关更多信息,请参阅 Beta 测试 页面。
