背景环境
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
问题解决。