<aside> 🐘
本页把“最新版本”落到可执行的迁移和运维动作:先识别版本差异,再演练升级;生产升级必须有回退路径。
</aside>
| 领域 | 变化 | 实践影响 |
|---|---|---|
| I/O | 异步 I/O 子系统;默认 io_method=worker | 结合 pg_stat_io、pg_aios 和延迟指标验证,不盲目调参 |
| 优化器 | B-tree skip scan 等优化 | 升级后重新采样并对关键 SQL 比较计划 |
| 标识符 | 内置 uuidv7() | 时间有序 UUID 可减少随机写放大,但先评估业务语义 |
| 生成列 | 虚拟生成列成为默认 | 检查依赖存储生成值的旧设计与权限 |
| 安全 | OAuth 认证能力增强 | 仍需 TLS、身份提供商和客户端能力共同配合 |
| 初始化 | initdb 默认启用数据校验和 | 校验备份、监控校验和错误,评估 I/O 成本 |
| 升级 | pg_upgrade 可保留优化器统计 | 仍要验证统计、扩展与执行计划,不等于免回归 |
<aside> ⚠️
下列是流程骨架,路径必须按发行版修改。禁止把首次演练放在生产窗口。
</aside>
# 1. 记录对象、扩展与容量
psql -d app -c "\dx"
pg_dumpall --globals-only > globals.sql
pg_dump -Fc -d app -f app-preupgrade.dump
# 2. 停止写入并执行兼容性检查
pg_ctl -D /data/pg-old stop
/usr/pgsql-18/bin/pg_upgrade --check --old-bindir=/usr/pgsql-17/bin --new-bindir=/usr/pgsql-18/bin --old-datadir=/data/pg-old --new-datadir=/data/pg-new
# 3. 正式升级(是否使用 link 模式取决于回退策略)
/usr/pgsql-18/bin/pg_upgrade --old-bindir=/usr/pgsql-17/bin --new-bindir=/usr/pgsql-18/bin --old-datadir=/data/pg-old --new-datadir=/data/pg-new
升级后必须完成: