あるマシンで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
何が悪いのでしょうか?
あなたはpsqlに送るように設計されたプレーンなSQLフォーマットでダンプしています。これはpg_restoreでは認識されません。
cat db.txt | psql dbname
トリックを行う必要があります
pg_dump
はデフォルトで、データの再作成に必要なSQLコマンドを作成します。それを回復するには、ファイルを入力としてpsql
(pg_restore
ではなく)を呼び出すだけです。 pg_restore
はバイナリにのみ使用されます(デフォルトではなく、あまり一般的ではありません) 非推奨)pg_dump
の形式。 docs をお読みください。
更新:pg_dump
で使用する-Fc
バイナリ形式(-Ft
pg_restore
)は問題なく、柔軟性が向上しています。しかし、標準的ではなく(SQL以外)、一部のツール(phpフロントエンドなど)からのインポートやテキストエディターでの操作には適しておらず、他のバージョンや他のデータベースへの移植性は少し低くなっています。バックアップについては、デフォルトのプレーンフォーマットを使用します。他のシナリオでは、バイナリ+ pg_restoreオプションは同等かそれ以上に適しています。
注意すべき点は、Postgresqlでは、典型的なシナリオでは、バックアップは通常pg_dump(プレーン)と標準のコマンドラインクライアント(psql)を使用した復元。
--format=c
オプションpg_dump
。これにより、pg_restore
復元します。
これは、古いデータベースをバックアップして復元するために行うことです
データベースをバックアップするには
pg_dump --format=c olddb_name > db_dump_file.dump
そのバックアップを復元するには
pg_restore -v -d newdb_name db_dump_file.dump
pg_dump および pg_restore の詳細を読む
Windowsユーザーの場合
type db.txt | psql --username="YOURNAME" dbname
魅力のように働く
猫dumpFileName | psql -h ip -d dbName -U userName -W
MySQLのSOURCE
コマンドに対して何かを行うことができます。
psql dbname
次に、postgresqlターミナルで:
\i filename
このエラーメッセージは、バックアップファイルに実際に何か問題があることを意味している可能性もあります(またはそれに関する想定)。
あるケースでは、バックアップファイルをDockerコンテナーにマウントして復元しようとしましたが、does not appear to be a valid archive
で失敗しました。そして実際には、マウントが正しく実行されなかったため、ファイルは空でした。