代码之家  ›  专栏  ›  技术社区  ›  Mark Swardstrom

运行pg\u restore时获取文件头中的“[archiver]不支持的版本(1.13)”

  •  172
  • Mark Swardstrom  · 技术社区  · 8 年前

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

    我跑步

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

    但我有一个错误:

    pg\U restore:[存档]文件头中不支持的版本(1.13)

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

    14 回复  |  直到 8 年前
        1
  •  199
  •   Wilson Vargas MaticDiba    8 年前

    您需要升级本地postgres以获取2018-03-01的最后一个安全补丁,如 Heroku 3月1日。您需要一个最新版本 10.3 , 9.6.8 , 9.5.12 , 9.4.17 9.3.22 .

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

    似乎这个补丁修改了pg\u dump,这可能就是为什么我们不能在没有该补丁的情况下使用pg\u restore来转储Heroku(应用了该补丁)。

        2
  •  19
  •   Canuk    8 年前

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

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

    我不得不升级Postgres。app从2.1.0升级到2.1.3,解决了问题。

        3
  •  13
  •   Jim Padilla    8 年前

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

    $ rails db:drop
    $ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
    
        4
  •  12
  •   cbx    8 年前

    从昨天(2018年1月3日)起,我们在从运行PostgreSQL 9.5的Heroku恢复备份时也遇到了问题:

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

    将PostgreSQL版本从9.5.11升级到9.5.12修复了此问题。

        5
  •  7
  •   Diego Aragão    8 年前

    对于那些试图在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
    
        6
  •  6
  •   alxpck    8 年前

    涉及到我的修复 二者都 正在更新我的Postgres。应用程序并更新我的本地自制PostgreSQL。

    更新我的Postgres。应用程序通过Canuk的答案:

    Open Postgres.app > Check for updates...

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

    brew upgrade postgresql brew postgresql-upgrade-database

        7
  •  6
  •   Andrew    8 年前

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

    从pgAdmin 3升级到pgAdmin 4为我解决了这个问题。

    如果您使用第三方工具(如PgAdmin)来恢复 提供的转储文件,即使使用 安装的Postgres版本是最新的。这是由于 第三方工具通常捆绑自己版本的pg\U 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
  •  5
  •   Ivan    8 年前

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

    这在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回购。

        9
  •  4
  •   Jean-François Corbett    7 年前

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

    $ pg_restore --version
    pg_restore (PostgreSQL) 9.4.8
    
    $ psql --version
    psql (PostgreSQL) 9.5.14
    

    问题是我安装了多个pg版本,pg\U 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\u restore将指向正确的版本,命令将执行

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

        10
  •  4
  •   Raf    7 年前

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

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

        11
  •  2
  •   Vagner Dev    7 年前

    您使用的是旧版本的pg\u restore binary,它不支持还原提供的转储文件。请确保您使用的是最新的Postgres版本,该版本必须高于以下版本: https://www.postgresql.org/about/news/1834/ (10.3、9.6.8、9.5.12、9.4.17和9.3.22)。

    您可以通过运行pg\u restore--version来检查正在使用的pg\u restore版本。

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

        12
  •  0
  •   Sean McCleary    8 年前

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

        13
  •  -1
  •   biruk1230 Marvin Correia    7 年前

    对于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
    

    希望对你有帮助

        14
  •  -3
  •   nfilzi    8 年前

    10分钟前,我在同一期杂志上看到了2005年的这篇文章: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

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