/usr/lib/postgresql/15/bin/pg_dump -Fc -d app > app.dump pg_restore -l app.dump | head pg_restore -d app_new app.dump
在新机器上导出老库直接失败,提示 aborting because of server version mismatch,客户端比服务端低两个大版本。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:pg_dump 不允许客户端版本低于服务端,机器上装的是系统源里的老版本,升级数据库时没有一起换客户端工具。
「pg_dump 版本不匹配」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:在目标机上装一个与服务端完全同版本的客户端;调用新客户端的绝对路径导出,不要直接敲 pg_dump 命令;导出完检查文件末尾有没有 pg_dump 写下的完成标记。
确认没问题再收工,dump 能列出完整对象清单,恢复到新库后表数量与原库一致。
