web-dev-qa-db-ja.com

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

あるマシンで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

何が悪いのでしょうか?

70
gruszczy

あなたはpsqlに送るように設計されたプレーンなSQLフォーマットでダンプしています。これはpg_restoreでは認識されません。

cat db.txt | psql dbname

トリックを行う必要があります

97
Peter Tillemans

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

更新:pg_dumpで使用する-Fcバイナリ形式(-Ftpg_restore)は問題なく、柔軟性が向上しています。しかし、標準的ではなく(SQL以外)、一部のツール(phpフロントエンドなど)からのインポートやテキストエディターでの操作には適しておらず、他のバージョンや他のデータベースへの移植性は少し低くなっています。バックアップについては、デフォルトのプレーンフォーマットを使用します。他のシナリオでは、バイナリ+ pg_restoreオプションは同等かそれ以上に適しています。

注意すべき点は、Postgresqlでは、典型的なシナリオでは、バックアップは通常pg_dump(プレーン)と標準のコマンドラインクライアント(psql)を使用した復元。

28
leonbloy

--format=cオプションpg_dump。これにより、pg_restore復元します。

13
psmears

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

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

pg_dump --format=c olddb_name > db_dump_file.dump

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

pg_restore -v -d newdb_name db_dump_file.dump

pg_dump および pg_restore の詳細を読む

7
Techie

Windowsユーザーの場合

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

魅力のように働く

5
user365852

猫dumpFileName | psql -h ip -d dbName -U userName -W

2
Mayank Raipure

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

psql dbname

次に、postgresqlターミナルで:

\i filename
2
greg0ire

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

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

1
Dag Høidahl