运行pg_restore时获得“ [文件头中的[归档]不支持的版本(1.13)””


165

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

我跑

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

但我收到此错误:

pg_restore:文件头中的[archiver]不支持的版本(1.13)

数据库似乎运行正常。这是一个Rails应用程序,我升级了pg gem。我可以跑步rake db:createdb:migrate就可以了。

Answers:


196

您需要升级本地Postgres才能像2018年Heroku3月1 日一样从2018-03-01获得最新的安全补丁。你需要的最后版本之一10.39.6.89.5.129.4.17,和9.3.22

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

似乎补丁已修改pg_dump,这可能就是为什么我们不能在没有该补丁的情况下使用pg_restore进行Heroku转储(应用了补丁)。


87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3'3

2
使用Linux Mint,我的版本是9.5.11,它说是最新的。如何通过apt-get强制它使用最新版本?
克里兹(Kritz)'18

Postgresql 9.5.12现在已在官方的Ubuntu 16.04 xenial repo 软件包中
。ubuntu.com/ xenial / postgresql

6
@ gerry3的注释是两个单独的命令。当心复制和粘贴!
乔·马西洛蒂

4
抬起头来,这两个命令brew upgrade postgresql && brew postgresql-upgrade-database确实可以解决问题,但是我的本地数据库在此过程中被删除了。如果您有关键数据,请备份它们!
贾维斯·约翰逊

19

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

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

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


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解决了该问题。


12

第一次遇到此问题时,这是将Heroku数据库还原到本地的方法:

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

不错的解决方法,我不知道heroku pg:pull。但这不是一个合适的解决方案,因为您仍然无法在本地还原以前的heroku转储,我也想这在拉动时会利用实时数据库资源。
demental

1
不知道什么是向下投票。OP实际上是在询问“我正在尝试下载数据库的副本并在本地还原它”,而我正在回答该特定问题。
Jim Padilla

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

6

对我来说,此修复程序包括更新Postgres.app和更新本地自制PostgreSQL。

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

打开Postgres.app>检查更新...

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

brew upgrade postgresql brew postgresql-upgrade-database


我不必更新自制的PostgreSQL。仅将Postgres.app更新到最新版本就足够了。
Mineralwasser

从postgres.app更新解决了我的问题
FutoRicky

6

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

从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


谢谢,这对我有用。我在PostgreSQL 9.5.12上,并且正在使用pgAdmin3。pgAdmin 4能够pg_restore成功执行。
亚历山大

5

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

这已在Ubuntu 16.04上进行了修复,可从Heroku数据库还原。

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

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

如果你的Ubuntu 17.04或17.10,注意PostgreSQL的兴致回购并不会有更新的客户端就是你需要的。您将要改用xenial Postgres存储库。


我确实建议升级数据库,因为它是一个安全补丁,如果您的数据库运行来自不受信任用户的查询,这一补丁非常重要:wiki.postgresql.org/wiki/… “该发行版的目的是解决CVE-2018-1058,它描述了用户如何在不同的架构中创建具有相同名称的对象,这些对象可以更改其他用户的查询行为并导致意外或恶意行为,也称为“特洛伊木马”攻击。”
RobM

我知道Unable to locate package postgresql-client-10何时执行
Doug

@RobM同意。“不建议升级...”是指不升级到您在生产中未使用的主要版本。当然,在本地和生产环境中升级到主要版本中的最新安全补丁当然是明智的。我将调整回答中的措辞,以更好地体现我的意思。
伊万

1
@Doug不要忘记首先添加适当的postgres存储库。类似于此注释中描述的内容。stackoverflow.com/a/49116272/3975541
Ivan

4

这是我如何解决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


3

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

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


2

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



-1

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

希望对您有帮助


-3

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

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


3
奇怪。我从heroku创建了一个转储文件,但遇到了同样的问题。这从未发生过。我尝试将PostgreSQL从9.6升级到10,但是没有用。
karantan '18

1
您是在10.2还是10.3上?我相信您现在必须是10.3。
杰克·金塞拉

该邮件列表线程来自2005年。最近发生的一些更改与该线程中的问题有所不同。
Yetanotherjosh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.