PostgreSQL 18于2025 年9月25日正式发布,作为一款主流开源关系型数据库,其新版本聚焦性能突破、功能扩展与安全性强化,涵盖异步 I/O、索引优化、认证升级等关键更新,同时明确了数据迁移的兼容性要求。
bash
官网地址:http://postgresql.org/
一、核心新特性:重塑性能与灵活性
PostgreSQL 18 的新功能直接针对实际业务场景中的性能瓶颈与功能缺口,核心亮点包括:
-
异步 I/O(AIO) subsystem
支持后端队列化多个读请求,大幅提升顺序扫描、位图堆扫描、VACUUM 等操作的效率。可通过
io_method
变量启用,配合io_combine_limit
控制,同时让无fadvise()
支持的系统也能使用effective_io_concurrency
(默认值提升至 16)。 -
多列 B 树索引"跳过扫描"(Skip Scan)
突破传统多列索引的限制------即使未对前序列加过滤条件,只要后续列有有效约束,仍可使用索引,显著扩展多列索引的适用场景。
-
虚拟生成列(默认)
生成列从"写入时计算"改为读取时计算 (默认虚拟模式),减少写入开销;若需保留原行为,可通过
STORED
选项指定。 -
OAuth 认证支持
新增
oauth
认证方式(配置于pg_hba.conf
),配合oauth_validator_libraries
加载令牌验证库,提升身份认证的灵活性与安全性。 -
时态约束(Temporal Constraints)
支持对 PRIMARY KEY、UNIQUE、FOREIGN KEY 添加范围约束(如
WITHOUT OVERLAPS
限制主键无重叠范围),满足时间序列数据等场景的唯一性需求。 -
UUIDv7 生成函数
新增
uuidv7()
函数,生成带时间戳排序属性的 UUID ,解决 UUIDv4 无序导致的索引碎片化问题;同时保留uuidv4()
作为显式生成 v4 版本的别名。 -
RETURNING 子句支持 OLD/NEW
INSERT、UPDATE、DELETE、MERGE 命令的 RETURNING 可显式返回"旧值"(
OLD
)与"新值"(NEW
),无需额外查询即可获取数据变更前后的完整状态。
二、迁移与兼容性:必看的 5 个关键变更
升级至 PostgreSQL 18 需通过 pg_dumpall、pg_upgrade 或逻辑复制 迁移数据,同时需注意以下不兼容变更:
变更类型 | 具体影响 | 应对方案 |
---|---|---|
initdb 默认启用数据校验和 | 新集群默认开启数据完整性校验,pg_upgrade 要求新旧集群校验和配置一致 | 若需兼容旧集群(无校验和),可通过 initdb --no-data-checksums 禁用 |
MD5 密码认证弃用 | CREATE/ALTER ROLE 设置 MD5 密码时会触发警告,未来版本将移除支持 | 优先迁移至 SCRAM 认证;若需临时关闭警告,可设置 md5_password_warnings = off |
VACUUM/ANALYZE 处理继承子表 | 默认会递归处理父表的继承子表,与旧版本"仅处理父表"行为相反 | 需保留旧行为时,添加 ONLY 选项(如 VACUUM ONLY 父表 ) |
CSV 格式 COPY 禁用 . 作为EOF | 避免误判数据中的 . 为结束符,但旧 psql 客户端连接 18 服务器可能出现 \copy 问题 | 升级 psql 客户端至 18 版本;确保 . 必须单独占一行(新版本强制校验) |
不允许未日志化(UNLOGGED)分区表 | 旧版本"创建 UNLOGGED 分区表但子表仍为日志化"的无效行为被禁止 | 需改为"所有分区统一日志化"或"不使用分区表+UNLOGGED" |
三、关键优化:性能、监控与灵活性升级
1. 优化器与索引:更智能的查询执行
- 优化器增强 :自动消除不必要的表自连接(可通过
enable_self_join_elimination
禁用)、将IN (VALUES ...)
转为x = ANY ...
以利用统计信息、支持Right Semi Join
计划,提升复杂查询效率。 - 索引扩展:GIN 索引支持并行创建、范围类型 GiST/btree 索引构建时可排序(加速索引创建)、非 btree 唯一索引可作为分区键。
2. 性能与资源管控
- 哈希连接/GROUP BY 优化:减少内存占用,同时加速 EXCEPT 集合操作与子计划哈希查找。
- VACUUM 精细化控制 :新增
vacuum_truncate
变量控制文件截断、vacuum_max_eager_freeze_failure_rate
调整全可见页冻结策略,降低后续全表冻结开销。 - NUMA 架构支持 :通过
configure --with-libnuma
启用 NUMA 感知,新增pg_shmem_allocations_numa
视图查看内存跨节点分布,适配大型服务器硬件。
3. 监控能力强化
- 日志与统计扩展 :
log_connections
支持细粒度配置(如记录连接阶段耗时)、pg_stat_io
新增read_bytes/write_bytes
列(统计 I/O 字节数)、pg_stat_checkpointer
新增num_done
列(记录完成的检查点数量)。 - 后端 I/O 追踪 :新增
pg_stat_get_backend_io()
函数查看单后端 I/O 统计,支持pg_stat_reset_backend_stats()
重置,便于定位慢查询的 I/O 瓶颈。
四、工具与扩展:更易用的管理体验
1. 核心工具升级
- pg_upgrade 优化 :支持保留优化器统计信息(减少升级后 ANALYZE 耗时)、可并行处理数据库检查(通过
--jobs
控制)、新增--swap
选项(直接交换目录,最快迁移方式)。 - psql 增强 :支持管道查询(
\startpipeline
/\sendpipeline
等命令)、\conninfo
输出改为表格格式(含更多连接细节)、新增WATCH_INTERVAL
变量设置\watch
默认间隔。 - COPY 功能扩展 :新增
REJECT_LIMIT
(忽略无效行的最大数量,配合ON_ERROR = 'ignore'
使用)、支持从物化视图导出数据(COPY TO 物化视图
)。
2. 扩展功能更新
- pg_stat_statements :新增
parallel_workers_to_launch
/parallel_workers_launched
列(追踪并行查询)、支持参数化 SET 语句(减少重复语句膨胀)。 - pgcrypto :新增 sha256crypt/sha512crypt 算法、支持 CFB 加密模式、新增
fips_mode()
函数查看 FIPS 模式状态。 - 新增扩展 :
pg_logicalinspect
(查看逻辑快照)、pg_overexplain
(为 EXPLAIN 增加调试细节)。
五、一键安装
脚本链接:
bash
https://blog.csdn.net/qq_36936192/article/details/151841725?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
六、小结
PostgreSQL 18 以"性能提升为核心,功能扩展为辅助,安全性强化为基础",通过异步 I/O、Skip Scan、虚拟生成列等特性解决实际业务中的效率痛点,同时通过 OAuth 认证、MD5 弃用提升安全性。对于需要升级的用户,需重点关注数据校验和、VACUUM 行为等兼容性变更,优先采用 pg_upgrade 并保留统计信息以减少停机时间。无论是大型企业的高并发场景,还是中小型团队的灵活运维需求,PostgreSQL 18 均提供了更优的数据库解决方案。