我刚刚在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:create
和db:migrate
。
答案 0 :(得分:188)
您需要升级本地postgres以获取2018-03-01的最后一个安全补丁,例如Heroku
执行第一次游行。您需要最后一个版本之一10.3
,9.6.8
,9.5.12
,9.4.17
和9.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:
通过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
基本上,这家伙说转储文件已损坏。