pg_dumpおよびpg_restore:入力ファイルは有効なアーカイブではないようです


66

あるマシンでpg_dumpを使用し、結果ファイルを別のマシンにコピーして、復元しようとしました。スキーマは同じだと思います。しかし、私は得る:

pg_restore: [archiver] input file does not appear to be a valid archive

私は次の操作を行いました:

pg_dump -a -f db.txt dbname

そして:

pg_restore -a -d dbname db.txt

何が悪いのでしょうか?


ダンプを生成したのと同じマシンでダンプをインポートしてみてください。また、Postgresのバージョンを確認してください。
ハンクゲイ

本番マシンなので、同じマシンにインポートすることはできません。他に何ができますか?
-gruszczy

このソリューションは、一部の人々にも関連する場合があります。stackoverflow.com
ムハンマドハンナン

回答:



26

pg_dumpデフォルトでは、データの再作成に必要なsqlコマンドを作成します。回復するには、入力としてファイルを使用してpsql(ではなくpg_restore)呼び出すだけです。pg_restoreは、バイナリ形式(デフォルトではなく、あまり一般的ではありませんが推奨されません)にのみ使用されますpg_dumpドキュメントを読んでください。

更新:使用するpg_dumpバイナリ形式(-Fc -Ft)は問題なくpg_restore、ある程度の柔軟性を提供します。しかし、それらはあまり標準的ではなく(SQL以外)、一部のツール(PHPフロントエンドなど)からインポートしたり、テキストエディターで操作したりすることは少なく、他のバージョンや他のデータベースへの移植性は少し劣ります。バックアップについては、デフォルトのプレーン形式に固執します。他のシナリオでは、バイナリ+ pg_restoreオプションは同等またはそれ以上に適しています。

維持するポイントは、Postgresqlでは、典型的なシナリオでは、バックアップは通常pg_dump(プレーン)と標準コマンドラインクライアント(psql)による復元によって行われるということです。


2
[OT]カスタム出力フォーマットの「推奨されない」ステータスに関して、私は異なることをお願いします-マニュアルの「これは、データのロードとオブジェクト定義の順序変更を可能にするという点で最も柔軟なフォーマットです」私にとってはかなりの支持として。
マイレンA. Radev

「推奨されていません」は誇張でした、同意します。ただし、「最も柔軟」とは、必ずしも「最も推奨される」という意味ではありません。明確にした。
レオンブロ

13

--format=cオプションを渡してみてくださいpg_dump。これでpg_restore復元できます。


これを改造した人は誰がその理由を説明したいでしょうか?受け入れられた答えは、これが機能することを説明しています:

@skrafi:あなたのポイントは何ですか?
psmears

1
申し訳ありませんが、コピー&ペースト、間違った出力は、右があるpg_restore: [archiver] did not find magic string in file headerので、これは単純なSQLダンプのために動作しません
skrafi

@skrafi:どういう意味かわかりません。を使用してpg_dump --format=c ...> archivefileからpg_restoreon を使用するarchivefileと、(少なくとも今テストしたときは)正常に動作します。ファイルが壊れている可能性がありますか?または、特定のバグに遭遇しましたか?
psmears

6

これは、古いデータベースをバックアップして復元するために行うことです

データベースをバックアップするには

pg_dump --format=c olddb_name > db_dump_file.dump

そのバックアップを復元するには

pg_restore -v -d newdb_name db_dump_file.dump

pg_dumpおよびpg_restoreの詳細を読む


5

Windowsユーザーの場合

type db.txt | psql --username="YOURNAME" dbname

魔法のように働く


これで助かりました!少なくともWindowsの回答を受け入れる必要があります。
ダニエルバトラー

2

MySQLのSOURCEコマンドに対して何かを行うことができます。

psql dbname

次に、postgresqlターミナルで:

\i filename


1

また、このエラーメッセージは、バックアップファイルに実際には何か問題があることを意味する場合もあります(または、それについてのあなたの仮定)。

あるケースでは、Dockerコンテナーにバックアップファイルをマウントして復元しようとしましたが、で失敗しましたdoes not appear to be a valid archive。実際、マウントが正しく実行されなかったため、ファイルは空でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.