在运行 pg _ return 时,在文件头中获得“[ archive ]不支持的版本(1.13)”

我刚刚升级到 mac os 上的 postgres 10.2和 heroku 上的10.2相匹配。我正在下载数据库的副本并在本地恢复。在升级之前,恢复可以正常工作。

我跑步

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

但我得到了这个错误:

Pg _ return: 文件头中[ archive ]不支持的版本(1.13)

数据库似乎工作正常。这是个 Rails 应用程序,我升级了 pg gem。我能正常运行 rake db:createdb:migrate

107666 次浏览

我10分钟前发表了同一期,发现了2005年的这个帖子: Https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

基本上,这家伙是说转储文件是腐败的。

你需要升级你的本地邮政系统来获得2018-03-01的最后一个安全补丁,就像 Heroku在第一次游行中做的那样。您需要最后的版本之一 10.39.6.89.5.129.4.179.3.22

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

看起来修改了补丁的 pg _ dump,这可能就是为什么我们不能在没有修补程序的情况下使用 pg _ return 来转储 Heroku (应用了补丁)。

我今天遇到了同样的问题,我不知道 Heroku 这边是否有什么变化,因为我在本地运行的是9.6,但是我在 Heroku 上的数据库是9.4,所以它似乎不是版本点的差异(直到今天它还在工作)

如果您正在 Mac 上使用 Postgre.app (https://postgresapp.com/) ,请确保您正在运行 v2.1.3(在撰写本文时,它是最新版本)。当你升级 Postgre.app 时,你会得到 Postgres 最新的补丁版本(这可能会导致你现在所经历的不匹配—— Heroku 已经升级了最新的安全补丁,而你的本地机器可能没有这个补丁)。

我不得不将 Postgre.app 从2.1.0升级到2.1.3,它解决了这个问题。

从昨天(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>

我不建议仅仅为了修复这个问题而在本地将 DB 升级到一个新的主要版本(应用安全补丁) ,因为您希望它与生产中的任何版本相匹配。

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

首先,确保拥有 Diego 提到的 postgreql repo,然后安装升级后的客户机。

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

如果你是 Ubuntu 17.04或17.10,请注意 PostgreSQL 的热情回购 没有有你需要的更新客户端。您将希望使用外国 Postgres 回购而不是。

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

对我来说,解决办法包括 都有更新我的 Postgre.app 和更新我本地自制的 PostgreSQL。

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

打开 Postgre.app > 检查更新..。

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

brew upgrade postgresql brew postgresql-upgrade-database

对于那些试图在 Ubuntu 中升级 postgreql 但没有成功的用户(就像 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为我解决了这个问题。

如果使用第三方工具(如 PgAdmin)还原 提供的转储文件,即使使用 安装的 Postgres 版本是最新的。这是由于 第三方工具通常会捆绑自己版本的 pg _ return 二进制,这可能不是最新的。 Https://help.heroku.com/ynh1zjus/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

您正在使用一个旧版本的 pg _ return 二进制文件,它不支持还原提供的转储文件。请确保您使用的是最新的 Postgres 版本,它必须高于以下版本: https://www.postgresql.org/about/news/1834/(10.3、9.6.8、9.5.12、9.4.17和9.3.22)。

您可以通过运行 pg _ return —— version 来检查正在使用的 pg _ restorversion。

如果您使用第三方工具(如 PgAdmin)来还原提供的转储文件,即使安装的 Postgres 版本是最新的,还原也可能无法成功。这是由于第三方工具经常捆绑自己版本的 pg _ return 二进制文件,这些文件可能不是最新的。

下面是我在 Ubuntu (16.04 LTS)上解决这个问题的方法,pg _ return/pg _ dump 给了我一个来自 psql 的旧版本

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8


$ psql --version
psql (PostgreSQL) 9.5.14

问题是我已经安装了多个 pg 版本,并且 pg _ return 指向早期版本

$ 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

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

$ cat ~/.postgresqlrc


9.5 main *

完成这一步之后,pg _ return 指向正确的版本,然后执行命令

详情请浏览此网页: https://serverfault.com/questions/610777/wrong-version-of-pg-dump-on-ubuntu

我在 pgadmin III 上遇到了这个问题,并通过切换二进制文件的位置解决了这个问题:

文件菜单 > 选项 > 二进制路径,然后将“ PG bin 路径”更改为 postgreql/9。X/bin 代替 ProgramFiles/pgadmin。之后恢复工作正常。

视窗:

打开命令提示符(cmd) ,然后转到位置 C:\Program Files\PostgreSQL\9.6\bin并运行以下命令:

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

希望对你有帮助