web-dev-qa-db-ja.com

PostgreSQL:ディレクトリ形式のダンプから1つのファイルを復元する

大規模な(> 700GB)PostgreSQLデータベースを持っています。 AWS RDSへのインポートに取り組んでいます。問題の原因となるモジュールがあることに気づきました。これは個別に処理しているので、現時点では、RDSへのデータの移行に取り組んでいます。

Pg_dumpとpg_restore 9.4.5を使用して、PostgreSQL 9.4.5との間で移行しています。

転送の数時間後(ディレクトリ形式でpg_dumpからpg_restoreへ)、ログを確認したところ、知らないPostgresユーザーが所有しているものが1つ(おそらくテーブル?)あることに気付きました。

呼び出しを行ったtoc.datファイル内の行を見つけ、.dat.gzファイルを解凍して、「\」のみが含まれていることを確認しました。 (引用符を除きます).

だから、私の質問は、転送を停止してやり直すのではなく、インポートが完了したらその特定のコマンドとファイルを単純に転送する方法はあるのでしょうか?

関連する詳細は次のとおりです。

Pg_dumpコマンド:

pg_dump -h localhost -p 5432 -d DBNAME -U USERNAME -F d -f /mnt/backup -j 7

Pg_restoreコマンド:

pg_restore --dbname=DBNAME --no-tablespaces --Host=HOSTNAME --port=5432 --username=USERNAME --verbose -F d -j 6 /mnt/backup

Toc.datファイルのセクション。ディレクトリ形式の出力をバイナリ形式で実現しましたが、これが識別可能であることは、1つのエラーに戻って修正する方法があることを意味します。

^@^F^@^@^@public^A^A^@^@^@^@^H^@^@^@postgres^@^E^@^@^@false^@^C^@^@^@173^A^A^@^@^@^@    ^@^@^@10393.dat^@W<^@^@^@^A^@^@^@^@^A^@^@^@0^@^E^@^@^@26106^@^N^@^@^@search_name_66^@
^@^@^@TABLE DATA^@^C^@^@^@^@^@^@^@^@^@^@^@^@^@^@]^@^@^@COPY search_name_66 (place_id, search_rank, address_rank, name_vector, centroid) FROM stdin;

Pg_restoreによって報告される実際のエラー:

pg_restore: [archiver (db)] Error from TOC entry 10393; 0 16787 TABLE DATA spatial_ref_sys postgres
3
Brooks

呼び出しを行ったtoc.datファイルの行を見つけ、.dat.gzファイルを解凍して、「\」のみが含まれていることを確認しました。 (引用符を除きます).

\.はコマンドではなく、COPYストリームのデータの終わりを示します。ダンプ内の対応するデータファイルにそれのみが含まれている場合、ソーステーブルは空でした。

また、pg_restore --listは、ダンプの内容をディレクトリーまたは圧縮形式でリストします。

個々のテーブルの内容をターゲットデータベースではなくSQLファイルに復元し、そのファイルを必要に応じて変更して、ターゲットで再生することもできます。詳細は pg_restoreマンページ を参照してください。

6
Daniel Vérité