web-dev-qa-db-ja.com

pg_restore:[archiver]はファイルヘッダーにマジックストリングを見つけられませんでした

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

その理由は何ですか?

13
maja

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を使用する必要があります。

19
Daniel Vérité

考えられる1つの問題は、データファイルが切り捨てられていることです。ファイルサイズを比較して、ファイル全体をダウンロードしているかどうかを確認します。

0
Sterling Cobb

Git-lfsを使用する場合は、ポインタではなく実際のファイルを用意してください。

0
mehmet