PostgreSQL 18 最新版本发布了,看看都有啥?17认证网

正规官方授权
更专业・更权威

PostgreSQL 18 最新版本发布了,看看都有啥?

转自墨天轮原创,作者:JiekeXu

前  言

PostgreSQL 全球开发小组于 2025 年 9 月 25 日宣布发布 PostgreSQL 18,这是全球最先进的开源数据库的最新版本,基本上每年的 9 月底均会发布新版本,如今已发布 PG18 了,PG18 生命周期到 2030 年 11 月 14 日,今天让我们来看看 Release Notes 都有啥。

Release Notes

PostgreSQL 18 包含许多新功能和增强功能,包括:

  • 异步 I/O (AIO) 子系统可以提高顺序扫描、位图堆扫描、真空扫描和其他操作的性能。
  • pg_upgrade现在保留优化器统计数据。
  • 支持“跳过扫描”查找,允许在更多情况下使用多列 B 树索引。
  • uuidv7()用于生成按时间戳排序的 UUID 的函数。
  • 虚拟生成列在读取操作期间计算其值。这现在是生成列的默认设置。
  • OAuth 身份验证支持。
  • INSERT、UPDATE、DELETE和MERGE命令中的RETURNING子句的OLD和NEW支持。
  • PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束的时间约束或范围约束。

以下部分将更详细地解释上述项目以及PostgreSQL 18 的其他新功能。

优化器

  • 自动删除一些不必要的表自连接
  • 可以使用服务器变量enable_self_join_elimination禁用此优化。
  • 转换一些IN (VALUES …)以x = ANY …获得更好的优化器统计数据
  • 允许将OR子句转换为数组,以便更快地进行索引处理
  • INTERSECT加速、、窗口聚合EXCEPT和视图列别名的处理
  • 允许键SELECT DISTINCT在内部重新排序以避免排序
  • 可以使用enable_distinct_reordering禁用此优化。
  • 忽略GROUP BY功能上依赖于其他列的列
  • 如果GROUP BY子句包含唯一索引的所有列以及同一表的其他列,则这些其他列是多余的,可以从分组中删除。对于非延迟主键,情况已经如此。
  • 允许将一些HAVING子句中的GROUPING SETS推送到WHERE子句中
  • 这允许更早地进行行过滤。此版本还修复了一些GROUPING SETS曾经返回不正确结果的查询。
  • 使用数值和时间戳值改进 generate_series() 的行估计
  • 允许优化器使用Right Semi Join计划
  • 当需要查找是否至少有一个匹配项时,使用半连接。
  • 允许合并连接使用增量排序
  • 提高访问多个分区的规划查询的效率
  • 在更多情况下允许分区连接,并减少其内存使用量
  • 改进分区查询的成本估算
  • 改进SQL语言函数计划缓存
  • 改进禁用优化器功能的处理 

索引

  • 允许跳过 Btree 索引的扫描
    这允许在更多情况下使用多列btree索引,例如当对第一个或早期索引列没有限制(或存在非等值限制)时,并且对后续索引列存在有用的限制。
  • 允许非 Btree 唯一索引用作分区键和物化视图
  • 索引类型仍然必须支持相等性。
  • 允许 GIN 并行创建索引
  • 允许对值进行排序以加速范围类型 GiST 和 Btree 索引构建

常规性能

  • 添加异步 I/O 子系统
    此功能允许后端将多个读取请求排队,从而实现更高效的顺序扫描、位图堆扫描、vacuum等操作。该功能通过服务器变量 io_method 启用,并新增了服务器变量 io_combine_limit和 io_max_combine_limit 用于控制。此外,对于不支持 fadvise() 的系统,此功能还允许effective_io_concurrency 和 maintenance_io_concurrency 的值大于零。新的系统视图 pg_aios 显示用于异步 I/O 的文件句柄
  • 提高访问许多关系的查询的锁定性能
  • 提高性能并减少哈希连接的内存使用量

    这还改进了EXCEPT使用的哈希集操作,以及子计划值的哈希查找。

  • 允许普通 vacuum 冻结一些页面,即使它们是全部可见的
    这降低了后续完整关系冻结的开销。这种激进程度可以通过服务器变量和每表设置vacuum_max_eager_freeze_failure_rate 进行控制。以前,vacuum 在需要冻结之前不会处理所有可见页面
  • 添加服务器变量 vacuum_truncate 来控制 VACUUM 期间的文件截断
  • 具有相同名称和行为的存储级参数已存在。
  • 将服务器变量 effective_io_concurrency 和 maintenance_io_concurrency 的默认值增加到 16
    这更准确地反映了现代硬件

监控

  • 增加服务器变量log_connections的日志记录粒度
    该服务器变量以前只是布尔值,现在仍然受支持。
  • 添加log_connections选项以报告连接阶段的持续时间
  • 添加log_line_prefix转义%L以输出客户端IP地址
  • 添加服务器变量log_lock_failures以记录锁获取失败
    具体来说,它报告 SELECT … NOWAIT 锁定失败。
  • 修改及其变体以报告在VACUUM、ANALYZE及其自动pg_stat_all_tables变体中花费的时间
    新的列是total_vacuum_time、total_autovacuum_time、total_analyze_timetotal_autoanalyze_time
  • 向VACUUM和ANALYZE添加延迟时间报告
    此信息显示在服务器日志中,系统查看pg_stat_progress_vacuum和pg_stat_progress_analyze,以及VACUUM和ANALYZE在VERBOSE模式下的输出;必须使用服务器变量track_cost_delay_timing启用跟踪。
  • 将WAL、CPU和平均读取统计输出添加到ANALYZE VERBOSE
  • 将完整的WAL缓冲区计数添加到VACUUM/ANALYZE (VERBOSE)和自动清理日志输出 
  • 添加每个后端 I/O 统计报告 
  • 可以通过 pg_stat_get_backend_io() 访问统计数据。可以通过 pg_stat_reset_backend_stats() 清除每个后端的 I/O 统计数据。
  • 添加pg_stat_io列以字节为单位报告 I/O 活动
    新列包括 read_bytes、write_bytes 和 extend_bytes。始终等于 BLCKSZ 的 op_bytes 列已被移除。
  • 将WAL I/O 活动行添加到 pg_stat_io
    这包括WAL接收器活动和此类写入的等待事件。
  • 更改服务器变量track_wal_io_timing来控制跟踪WAL时间,而pg_stat_io不是pg_stat_wal
  • 从pg_stat_wal中删除读取/同步列
    这将删除列wal_write、wal_sync 和 wal_write_time、wal_sync_time
  • 添加函数pg_stat_get_backend_wal()以返回每个后端WAL统计信息
    每个后端的WAL统计数据可以通过 pg_stat_reset_backend_stats() 清除。
  • 添加功能以具体列出/ (Yushi Ogiwara)pg_ls_summariesdir()的内容§PGDATApg_wal/summaries
  • 添加列pg_stat_checkpointer。num_done报告已完成的检查点数量
    列num_timed并num_requested计算已完成和已跳过的检查点。
  • 添加列pg_stat_checkpointer。slru_written报告已写入的SLRU缓冲区
    另外,修改检查点服务器日志消息以报告单独的共享缓冲区和SLRU缓冲区值。
  • 添加列以pg_stat_database报告并行工作者活动
    新的列是parallel_workers_to_launch和parallel_workers_launched。
  • 让查询 ID 计算常量列表时仅考虑第一个和最后一个常量 
    pg_stat_statements 使用混乱。
  • 调整查询 ID 计算以使用相同的关系名称将查询分组
    即使不同模式中的表具有不同的列名,情况也是如此。
  • 添加列pg_backend_memory_contexts.type来报告内存上下文的类型
  • 添加列pg_backend_memory_contexts.path以显示内存上下文父级

权限

  • pg_get_acl()添加检索数据库访问控制详细信息的功能
  • has_largeobject_privilege()添加检查大对象权限的功能
  • 允许ALTER DEFAULT PRIVILEGES定义大对象默认权限
  • 添加预定义角色pg_signal_autovacuum_worker
    这允许向自动清理工作者发送信号。

Server 配置

  • 添加对 OAuth 身份验证方法的支持
    这会添加一种 oauth 身份验证方法 pg_hba.conf、libpq OAuth 选项、一个服务器变量 oauth_validator_libraries 来加载令牌验证库,以及一个配置标志–with-libcurl来添加所需的编译时库。
  • 添加服务器变量 ssl_tls13_ciphers 以允许指定多个以冒号分隔的 TLSv1.3 密码套件 
  • 更改服务器变量 ssl_groups 的默认值以包含椭圆曲线 X25519 
  • 将服务器变量重命名 ssl_ecdh_curve 为 ssl_groups 并允许指定多个以冒号分隔的ECDH曲线
    先前的名称仍然有效。
  • 将取消请求密钥设置为 256 位
    只有当服务器和客户端支持此版本中引入的有线协议版本 3.2 时才有可能。
  • 添加服务器变量 autovacuum_worker_slots 来指定后台工作者的最大数量 
    设置此变量后,可以在运行时将 autovacuum_max_workers 调整到最大值,而无需重新启动服务器。
  • 允许指定触发自动清理的固定数量的死元组
    服务器变量是 autovacuum_vacuum_max_threshold。百分比仍然用于触发。
  • 更改服务器变量 max_files_per_process 以限制仅由后端打开的文件
    以前,postmaster 打开的文件也计入此限制。
  • 添加服务器变量 num_os_semaphores 来报告所需的信号量数量
    这对于操作系统配置很有用。
  • 添加服务器变量extension_control_path来指定扩展控制文件的位置

流复制和恢复

  • 允许使用服务器变量 idle_replication_slot_timeout 自动使非活动复制槽失效
  • 添加服务器变量 max_active_replication_origins 来控制最大活动复制源
    这之前是由 max_replication_slots 控制的,但是这个新设置在需要较少插槽的情况下允许更高的来源计数。

逻辑复制 

  • 允许生成的列的值进行逻辑复制
    如果发布指定了列列表,则所有指定的列(无论生成与否)都会发布。如果没有指定列列表,则发布选项控制是否发布生成的列。之前生成的列不会被复制,订阅者必须尽可能计算这些值;这对于缺乏此功能的非 PostgreSQL publish_generated_columns 订阅者尤其有用。
  • 将默认的 CREATE SUBSCRIPTION 流选项从 off 更改为 parallel
  • 允许 ALTER SUBSCRIPTION 更改复制槽的两阶段提交行为
  • 应用逻辑复制更改时发生日志冲突
    另在新专栏中报道pg_stat_subscription_stats。
以上仅是 Server 层面的改变,还有实用程序命令、数据类型、函数、Libpq、Psql、Server 应用程序、源代码、附加模块等其他八大项内容这里就不再罗列了。感兴趣的可以直接读原文 Release Notes,这里仅提供如下简图。 

关于 PostgreSQL

PostgreSQL 是世界上最先进的开源数据库,拥有一个数以千计的用户、贡献者、公司和组织组成的全球社区。PostgreSQL起源于加利福尼亚大学伯克利分校,已经有超过40年的历史,并且以无与伦比的速度持续发展。PostgreSQL成熟的特性不仅与顶尖商业数据库系统相媲美,而且在高级数据库功能、可扩展性、安全性和稳定性方面超越了它们。

快速安装体验

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmsudo yum install -y postgresql18-serversudo /usr/pgsql-18/bin/postgresql-18-setup initdbsudo systemctl enable postgresql-18sudo systemctl start postgresql-18

参考链接

https://www.postgresql.org/about/press/presskit18/zh/https://www.postgresql.org/docs/18/release-18.htmlhttps://www.postgresql.org/download/linux/redhat/
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!

——————————————————————————

公众号:JiekeXu DBA之路

墨天轮:https://www.modb.pro/u/4347

CSDN :https://blog.csdn.net/JiekeXu

ITPUB:https://blog.itpub.net/69968215

IFCLUB:https://ifclub.com.cn/user?type=1

腾讯云:https://cloud.tencent.com/developer/user/5645107

想了解更多行业资讯

扫码关注👇

了解更多考试相关

扫码添加上智启元官方客服微信👇

未经允许不得转载:17认证网 » PostgreSQL 18 最新版本发布了,看看都有啥?
分享到:0

评论已关闭。

400-663-6632
咨询老师
咨询老师
咨询老师