- ベストアンサー
テーブル単位でのリストア方法はあるのか?
- 質問者は、pg_dumpallコマンドで作成したバックアップファイルからテーブル単位でリストアする方法があるのか尋ねています。
- pg_dumpallのマニュアルによると、リストアはpsqlコマンドを使用する必要がありますが、テーブル単位での復元のオプションはないようです。
- また、pg_restoreコマンドでリストアを試みたところ、エラーが発生しました。質問者は、この問題について情報を探しているが見つけられていないと述べています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 通常のエディタで開くことはもちろん、手作業で行うことは気が遠くなってしまいます。 そういうことでしたら、思いつくのは下記の様な方法でしょうか。 a. pg_dumpall ではなく pg_dump を使ってダンプする 元のDBに接続でき、現在の状態のリストアでよいならば、この方法が簡単でしょう。 例) pg_dump -h localhost -p 5432 -U user_hoge -t table_hoge db_hoge > dump.txt; http://www.postgresql.jp/document/9.2/html/app-pgdump.html b. スクリプト言語を使って対象のテーブルの箇所を抽出する perl や ruby などを使えば、対象部分を抽出するプログラムが割りと簡単に作れるかと思います。 c. サイズの大きいファイルも扱えるエディタを使って抽出する 例えば、 vim などではサイズが大きくてもさほど不自由なく編集はできたと思います。 検索機能で該当箇所への移動・選択を行い、新旧の2ファイルを開いてコピーすれば良いかと。
その他の回答 (1)
- root139
- ベストアンサー率60% (488/809)
pg_dumpall で出力したダンプファイルをテキストエディタで開いてみれば分かりますが、通常のSQL文が並んでいるだけです。 したがって、リストアしたいテーブルのCREATE文やCOPY文をダンプファイルから抜き出した新たなファイルを作って psql に流し込めば、任意のテーブルだけリストアする事も出来るかと。
お礼
root139様、ご回答ありがとうございます。 おっしゃるとおりですが、但しバックアップファイルはおおよそ35Gb程度あり、おおよそ100テーブルが含まれます。 通常のエディタで開くことはもちろん、手作業で行うことは気が遠くなってしまいます。 そこで、ストリームエディタを使用するなど、ご経験のある方があればお聞かせいただきたいと思います。
お礼
ありがとうございました。
補足
C++で抽出プログラムを作成しました。 今のところうまく動いています。