PostgreSQL 9.1を使用していて、pg_dump
で生成されたバックアップファイルを復元したい:
Sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name
このコマンドは、既存のデータベースオブジェクトの削除から始まり、次にすべてのテーブルを生成し、インジタイズ、シーケンスなどを行い、最後にデータを挿入する有効なSQLファイルを生成します。
生成されたバックアップファイルを復元しようとすると、次のようになります(表示目的でのみ改行が追加されます)。
Sudo pg_restore
-d database_name -h 127.0.0.1 -U postgres
--format=c --clean --create out.sql
失敗して出力されます:
pg_restore: [archiver] did not find magic string in file header
その理由は何ですか?
pg_restore --format=c ...
を使用して復元していますが、pg_dump
は--format=c
では実行されませんでした。デフォルトであるplain形式で実行されました。
pg_dump
のマンページから:
-F format, --format=format Selects the format of the output. format can be one of the following: p, plain Output a plain-text SQL script file (the default).
プレーン形式のダンプはpsql
コマンドラインツールに直接入力する必要があります。pg_restore
はそれが何であるかを認識していないため、このエラーメッセージが表示されます。ファイルヘッダーでマジックストリングが見つかりませんでした。
シェルでmore out.sql
を使用してダンプファイルを直接見ると、読み取り可能なSQLコマンドが表示されます。 psql -f out.sql [other options]
で復元してください。 --create
呼び出しにpg_dump
オプションが存在しないため、最初にターゲットデータベースを作成することをお勧めします。
一方、オプションに--format=c
を追加してダンプを再度呼び出すことができます。次に、それは逆になります。カスタム形式のダンプファイルを解釈するには、pg_restore
を使用する必要があります。
考えられる1つの問題は、データファイルが切り捨てられていることです。ファイルサイズを比較して、ファイル全体をダウンロードしているかどうかを確認します。
Git-lfsを使用する場合は、ポインタではなく実際のファイルを用意してください。