pg_restoreを実行すると、「[archiver]サポートされていないバージョン(1.13)がファイルヘッダーに含まれています」が表示される


165

Herokuの10.2と一致するMac OSの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大丈夫です。

回答:


196

Heroku最初の行進と同様に、2018-03-01から最後のセキュリティパッチを入手するには、ローカルのpostgresをアップグレードする必要があります。あなたは最後のリリースのいずれかが必要になり10.39.6.89.5.129.4.17、と9.3.22

セキュリティパッチは、https://www.postgresql.org/about/news/1834/にあります

パッチがpg_dumpを変更したようです。そのため、(パッチが適用された)Herokuのダンプ用のパッチがないと、pg_restoreを使用できなくなります。


87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3

2
Linux Mintを使用すると、私のバージョンは9.5.11で、最新版であると表示されます。apt-getを使用して強制的に最新バージョンを使用させるにはどうすればよいですか?
クリッツ

Postgresql 9.5.12が公式のUbuntu 16.04 xenial repo packages.ubuntu.com/xenial/postgresql-9.5にあります
HarlemSquirrel

6
@ gerry3のコメントは2つの別々のコマンドです。コピーと貼り付けに注意してください!
ジョーマシロッティ2018年

4
2つのコマンドをbrew upgrade postgresql && brew postgresql-upgrade-database実行すると、実際に問題が解決しますが、ローカルデータベースが途中で削除されました。重要なデータがある場合はバックアップしてください!
ジャービスジョンソン

19

ローカルで私は9.6を実行していますが、Heroku上のデータベースは9.4なので、Heroku側で何かが変更されたかどうかはわかりませんが、バージョンポイントの違いについては(今日まで働いていました。)

MacでPostgres.app(https://postgresapp.com/)を使用している場合は、実行していることを確認してくださいv2.1.3(これを書いている時点では最新バージョンです)。Postgres.appをアップグレードすると、Postgresの最新のパッチリリースが取得されます(これにより、現在発生している不一致が発生している可能性があります。Herokuは最新のセキュリティパッチにアップグレードしており、ローカルマシンにそれがない可能性があります)。

Postgres.appを2.1.0から2.1.3にアップグレードする必要があり、問題は解決しました。


12

昨日(2018年1月3日)以降、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ダンプをローカルで復元することはできないため、これは適切な修正ではありません。また、プル中にライブデータベースリソースを利用すると思います。
2018年

1
反対投票の目的がわからない。OPは文字通り「データベースのコピーをダウンロードしてローカルに復元しようとしている」と質問し、その特定の質問に答えています。
ジム・パディーヤ

7

Ubuntuでpostgresqlをアップグレードしようとして失敗した場合(上記のJohanのコメントのように)、公式のPostgreSQLのダウンロード手順に記載されているように、PostgreSQL aptリポジトリを使用してみてください: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を使用しており、pgAdmin 3を使用していました。pgAdmin4はpg_restore正常に実行できました。
Alexander

5

これを修正するために、ローカルで新しいメジャーバージョンにDBをアップグレードする(セキュリティパッチを適用する)ことはお勧めしません。

これにより、Herokuデータベースから復元してUbuntu 16.04で修正されました。

まず、diegoが言及したように、postgresqlリポジトリがあることを確認します。次に、アップグレードしたクライアントをインストールします。

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

Ubuntu 17.04または17.10の場合は、PostgreSQLのzestyリポジトリに必要な更新済みクライアントがないことに注意してください。代わりに、Xenial Postgresリポジトリを使用します。


データベースを信頼できないユーザーからクエリを実行する場合に非常に重要なセキュリティパッチであるため、dbのアップグレードをお勧めします。wiki.postgresql.org / wiki / "リリースの目的は、CVE-2018-1058に対処することでした他のユーザーのクエリの動作を変更し、予期しないまたは悪意のある動作を引き起こす可能性のある、異なるスキーマで同じ名前のオブジェクトをユーザーが作成する方法。「トロイの木馬」攻撃とも呼ばれます。」
RobM 2018年

私がUnable to locate package postgresql-client-10これをするとき、私は得る
Doug

@RobM同意。「アップグレードを推奨しない...」とは、本番環境で使用していないメジャーバージョンにアップグレードしないことを指していました。もちろん、メジャーバージョン内でローカルに、そして本番環境で最新のセキュリティパッチにアップグレードするのが賢明です。私は自分の意味をよりよく反映するために、私の答えの表現を微調整します。
Ivan

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パス」をProgramFiles / pgadminではなくpostgresql / 9.x / binに変更しました。その後、復元は正常に機能しました。


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にアップグレードしようとしましたが、うまくいきませんでした。
カランタン2018年

1
10.2または10.3を使用していますか?あなたは10.3にいる必要があります。
ジャックキンセラ

そのメーリングリストのスレッドは2005年のものです。最近、スレッドでの問題とは異なる変更が行われています。
Yetanotherjosh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.