当 运行 pg_restore 时获取“文件头中 [archiver] 不受支持的版本 (1.13)”

Getting "[archiver] unsupported version (1.13) in file header" when running pg_restore

我刚刚在 mac os 上升级到 postgres 10.2,这与 heroku 上的 10.2 相匹配。我正在尝试下载数据库的副本并将其还原到本地。在升级之前,还原可以正常工作。

我运行

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d database_name backup.dump

但我收到此错误:

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

数据库似乎工作正常。这是一个 rails 应用程序,我升级了 pg gems。我可以 运行 rake db:createdb:migrate 就好了。

我 运行 10 分钟前在同一个问题上,从 2005 年开始发现这个话题: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

基本上这家伙是说转储文件已损坏。

您需要升级本地 postgres 才能获得 2018-03-01 的最后一个安全补丁,就像 Heroku 3 月 1 日所做的那样。您需要最新版本 10.39.6.89.5.129.4.179.3.22 之一。

可以在此处找到安全补丁 https://www.postgresql.org/about/news/1834/

似乎补丁已修改 pg_dump,这可能就是为什么如果没有 Heroku 转储的补丁(已应用补丁),我们就不能再使用 pg_restore。

我 运行 今天遇到了同样的问题,我不知道 Heroku 方面是否发生了一些变化,因为本地我是 运行 9.6 但我在 Heroku 上的数据库是 9.4,所以它好像不是版本点差的问题(一直用到今天)

如果您在 Mac 上使用 Postgres.app (https://postgresapp.com/),请确保您是 运行 v2.1.3(截至撰写本文时那是最新的版本)。当您升级 Postgres.app 时,您会获得 Postgres 的最新补丁版本(这可能会导致您当前遇到的不匹配 - Heroku 已升级为最新的安全补丁,而您的本地计算机可能没有)。

I had to upgrade Postgres.app from 2.1.0 to 2.1.3 and it solved the problem.

从昨天 (03/01/2018) 开始,我们在 PostgreSQL 9.5 上从 Heroku 运行 恢复备份时也遇到了问题:

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

将我们的 PostgreSQL 版本从 9.5.11 升级到 9.5.12 解决了这个问题。

我第一次遇到这个问题,以下是我将 Heroku 数据库恢复到本地的方法:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>

我不建议在本地将您的数据库升级到新的主要版本(应用安全补丁)只是为了修复此问题,因为您希望它与生产中的任何版本相匹配。

这在 Ubuntu 16.04 上修复了它,从 Heroku 数据库恢复。

首先,确保您拥有 diego 提到的 postgresql 存储库。然后安装升级后的客户端。

sudo apt-get update && sudo apt-get install postgresql-client-10

如果您是 Ubuntu 17.04 或 17.10,请注意 PostgreSQL 的 zesty repo 没有 有您需要的更新客户端。您将需要使用 xenial Postgres 存储库。

我遇到了同样的错误。我在本地更新到 postgresql 10.3,这解决了我的问题。

我的修复涉及 更新我的 Postgres.app 和更新我的本地自制程序 PostgreSQL。

通过 Canuk 的回答更新我的 Postgres.app:

Open Postgres.app > Check for updates...

通过 gerry3 对已接受答案的评论更新我本地的自制 PostgreSQL:

brew upgrade postgresql brew postgresql-upgrade-database

对于那些试图在 Ubuntu 中升级 postgresql 但没有成功的人(如上面 Johan 的评论),请尝试使用 PostgreSQL apt 存储库,如官方 PostgreSQL 下载说明中所述:https://www.postgresql.org/download/linux/ubuntu/

deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update

在 Windows 使用 pgAdmin 3 时遇到过这个问题。

从 pgAdmin 3 升级到 pgAdmin 4 解决了我的问题。

If you are using a third-party tool, such as PgAdmin, to restore the provided dump file, the restore may not succeed even with the installed Postgres version being up to date. This is due to third-party tools often bundling their own versions of the pg_restore binary, that may not be up to date. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

您使用的是不支持恢复提供的转储文件的旧版本 pg_restore 二进制文件。请确保您使用的是最新的 Postgres 版本,该版本必须高于以下版本:https://www.postgresql.org/about/news/1834/(10.3、9.6.8、9.5.12、9.4.17 和 9.3.22)。

您可以通过 运行 pg_restore --version.

检查您正在使用的 pg_restore 版本

如果您使用第三方工具(例如 PgAdmin)来恢复提供的转储文件,即使安装的 Postgres 版本是最新的,恢复也可能不会成功。这是因为第三方工具通常捆绑了他们自己的 pg_restore 二进制版本,可能不是最新的。

这是我在 Ubuntu(16.04 LTS) 上解决问题的方法,其中 pg_restore/pg_dump 给了我一个旧版本,来自 psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

问题是我安装了多个 pg 版本,pg_restore 指向较早的版本

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

修复方法是创建指向正确版本的 ~/.postgresqlrc 文件

$ cat ~/.postgresqlrc

9.5 main *

完成后,pg_restore 指向正确的版本,命令通过

此处给出的详细信息:https://serverfault.com/questions/610777/wrong-version-of-pg-dump-on-ubuntu

我在 pgadmin III 上遇到了这个问题,并且能够通过切换二进制文件位置来修复它:

文件菜单 > 选项 > 二进制路径,然后将 "PG bin path" 更改为 postgresql/9。x/bin 而不是 ProgramFiles/pgadmin。之后恢复正常。

对于Windows:

打开命令提示符 (cmd),然后转到位置 C:\Program Files\PostgreSQL.6\bin 和 运行 这些命令:

pg_restore -U username -d dbname -1 filename.dump
pg_restore -U postgres -d app -1 G:\app09-07-2019.backup

希望对您有所帮助