我在 Linux 机器 (RHEL 7.4) 上使用 postgresql-9.4 (端口 5432) 和 postgresql-10.0 (端口 5433)。 Postgresql-9.4 使用 yum 存储库安装,Postgresql-10.0 使用不同分区中的源安装。
我已经使用 pg_dump 在 Postgresql-9.4 上备份了数据库(dtbase.backup),并尝试使用 pg_restore 在 Postgresql-10.0 上恢复它。
这样做时,我收到以下错误:
pg_restore: [archiver] unsupported version (1.13) in file header
我检查了不同的论坛但无法找到解决方案。任何帮助将不胜感激。
答案1
您的 9.4 安装可能更新到9.4.17
或更高版本,引入了一个补丁,使您制作的转储与之前的 postgresql 版本 10 不10.3
兼容这个堆栈溢出答案和Postgres 公告它链接到。
从公告来看:
此版本解决了一个安全漏洞:
* CVE-2018-1058:pg_dump 和其他客户端应用程序中不受控制的搜索路径元素
此更改会破坏之前具有兼容 pg_dump/pg_restore 工作流程的版本之间的兼容性,除非两个版本都已更新以包含 CVE 补丁。
您可能需要考虑升级版本 10 安装,以便也从 yum 安装。我还没有使用版本 10 的经验,但很可能 postgres 继续对安装进入的目录进行版本控制,因此您应该能够从 yum 安装 9.4 和 10.3(并且比获取安全补丁更容易)从源头重建!)。
答案2
我已经解决了,没有升级。我再次使用 10.0 的 pg_dump 而不是 9.4 进行备份,这次 pg_restore 起作用了。