PostgreSQL 的版本号由主版本号与次版本号构成(如 18.6,其中 18 为主版本,6 为次版本维护版本)。
小版本(次版本)之间绝对保持内部磁盘数据存储格式的 100% 物理二进制兼容。执行小版本升级(如从 18.1 升级至 18.6)极其简单:停机替换二进制可执行文件并直接拉起新服务即可,底层数据目录保持原样、无需任何迁移转换。
对于主版本大升级(例如从 17 升级至 18),由于内部物理存储布局与系统目录可能发生重构,必须进行数据迁移。主要支持两类升级途径:
逻辑导出导入升级:使用 pg_dumpall 导出全局 SQL 逻辑全量备份,并在新版本初始化好的集群中重新执行恢复。流程最安全,但面对数 TB 级大库耗时漫长。
原地物理秒级升级(pg_upgrade):使用官方工具 pg_upgrade(结合 --link 硬链接模式)。它直接重用底层的物理数据文件,仅重建系统目录元数据,使数 TB 乃至数十 TB 的超大规模集群大版本升级能够被收敛在几分钟甚至几十秒内秒级完成。
在跨大版本升级时,最传统可靠的方式是使用新版本的 pg_dumpall 导出旧实例的全部数据与用户权限定义,随后导入至全新的空集群中。
使用官方工具 pg_upgrade 可以实现秒级跨大版本物理升级。结合硬链接模式(--link),升级过程无需复制物理数据文件,仅需几分钟即可完成 TB 级集群的平滑就地升级。
利用内置的逻辑复制功能,可以在旧版本与新版本集群之间建立实时数据同步管道,并在割接窗口瞬间完成客户端流量切换,实现停机时间趋近于零的无感升级。