web-dev-qa-db-ja.com

pg_restore特定のテーブルのみ

pg_restoreを使用して、ダンプファイルから新しく作成されたデータベースを復元する方法を探していますが、そこから特定のテーブルのみファイル。 (データベースには、復元に時間がかかり、気にしない余分なテーブルがたくさんあります。)

私は最初にpg_restore-t/--tableフラグで試しましたが、それらのテーブルに必要な拡張機能が有効になりませんでした。大したことではありません。 psql -c "CREATE EXTENSION ..."コマンドの前にpg_restoreを手動で実行できます。私のより大きな問題は、-tコマンドが、制約やインデックスなど、テーブルに関連する他のことをスキップするように見えることです。

インデックスは煩わしいですが、pg_restore --listを実行してawk/grep/etcを使用できます。インデックスのリストを取得し、それらをpg_restore-I/--indexフラグを付けて渡すため、プロセスは次のようになります(と思います)。

  1. pg_restore -t table1 -t table2 --schema-only ...
  2. pg_restore -I index1 -I index2 ...
  3. pg_restore -t table1 -t table2 --data-only ...

しかし(a)それでも私には制約が設定されません(b)のためのこのラウンドアバウトの解決策でウサギの穴を下りているように感じます私が簡単だと思ったもの。

特定のテーブルのみをダンプするようにpg_dumpに指示できることは知っていますが、データベースのダンプを作成するのに長い時間がかかるため、それを回避したいと思っていました。

2
JacobEvelyn

「カスタム」フォーマットを使用している場合は、-l(エル)および-Lオプションを使用してこれを行うことができます。

  1. 「カスタム」フォーマットを使用して、ダンプを作成します
  2. pg_restore -l /path/to/dump/file > table_of_contents.txtを実行します
  3. table_of_contents.txtを編集して、不要なテーブルへの参照を削除します。 (それらをすべて取得することを確認してください。セミコロンで行をコメント化できます。)
  4. pg_restore ... -L table_of_contents.txt /path/to/dump/fileでデータベースを復元する

利益!

6
Chris Curvey