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

时间:2018-03-02 07:03:02

标签: postgresql heroku 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]文件头

中不支持的版本(1.13)

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

14 个答案:

答案 0 :(得分:188)

您需要升级本地postgres以获取2018-03-01的最后一个安全补丁,例如Heroku执行第一次游行。您需要最后一个版本之一10.39.6.89.5.129.4.179.3.22

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

似乎修补程序修改了pg_dump,这可能就是为什么我们不能再使用pg_restore而没有针对Heroku转储的补丁(应用补丁)。

答案 1 :(得分:17)

今天我遇到了同样的问题,我不知道Heroku的一面是否有变化,因为我在本地运行9.6但是我在Heroku上的数据库是9.4,所以它没有&# 39; t似乎与版本点差异有关(它一直工作到今天。)

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

  

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

答案 2 :(得分:12)

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

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

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

答案 3 :(得分:12)

我第一次遇到这个问题,这是我如何将Heroku数据库恢复到我的本地:

luceneQueryString("t?st", "this is a test ...");

答案 4 :(得分:7)

对于那些试图在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

答案 5 :(得分:6)

对我的修复涉及两者更新我的Postgres.app并更新我的本地自制程序PostgreSQL。

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

  

Open Postgres.app > Check for updates...

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

brew upgrade postgresql brew postgresql-upgrade-database

答案 6 :(得分:5)

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

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

首先,确保你有postgresql repo作为diego提到。然后安装升级后的客户端。

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

如果您是Ubuntu 17.04或17.10,请注意PostgreSQL的热情回购拥有您需要的更新客户端。您将需要使用xenial Postgres repo。

答案 7 :(得分:3)

使用pgAdmin 3在Windows上出现此问题。

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

  

如果您使用第三方工具(例如PgAdmin)来恢复   提供转储文件,即使使用,恢复也可能不成功   安装Postgres版本是最新的。这是因为   第三方工具经常捆绑自己的pg_restore版本   二进制,可能不是最新的。   https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

答案 8 :(得分:2)

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

文件菜单>选项>二进制路径,然后将“ PG bin路径”更改为postgresql / 9.x / bin而不是ProgramFiles / pgadmin。之后还原工作正常。

答案 9 :(得分:1)

您正在使用的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二进制版本,可能不是最新版本。

答案 10 :(得分:1)

这是我在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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

对于Windows:

打开命令提示符(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

希望对您有帮助

答案 13 :(得分:-2)

我在10分钟前遇到了同样的问题,并从2005年开始发现这个帖子: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

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