背景环境

centos7.9,源库postgres14,目标库postgres11 由于业务需求,需要用pg11来支撑几天服务,但是源库为pg14,使用他的备份用11恢复会报

pg_restore: [archiver] unsupported version (1.14) in file header

原因

备份时使用了 pg_dump -Fc xxx 进行备份的,-Fc 表示使用自定义格式(Custom)的备份文件。当使用 -Fc 参数时,pg_dump 将以二进制格式创建备份文件,该文件包含了用于还原数据库的完整数据和结构。

自定义格式的备份文件具有以下特点:

  • 数据和结构被压缩,占用较少的磁盘空间。

  • 可以进行部分恢复,只还原某个特定数据库对象或表的数据。

  • 可以选择性地还原备份文件中的单个表、模式或者命名空间。

解决方案

既然知道-Fc为自定义格式,要么把目标库换成相同版本进行恢复,要么就改格式,使用sql的进行恢复 例如原来是:

pg_dump  -U postgres -Fc db >  /db_backup/db_230704.dump

换为

pg_dump  -U postgres  db >  /db_backup/db_230704.sql

恢复命令由pg_restore换成psql

psql -U postgres -d db < db_230704.sql

问题解决。