こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テーブル単位のリストア

pg_dumpall > [出力ファイル名]

で作成したバックアップからテーブル単位でリストアする方法はないのでしょうか?

pg_dumpallのマニュアルを読むと、リストアはpsqlで行うことになっていますが、psqlのマニュアルには
テーブル単位で取り出すオプションなどはないようです。

また:pg_dumpallで作成したファイルを:

pg_restore -l [入力ファイル名]

の入力ファイルにすると、"pg_restore: [archiver] input file does not appear to be a valid archive"
エラーが発生します。

webでも調べてみたのですが、該当するページが見あたりません。
お手数ですがご教授ください。

投稿日時 - 2013-05-07 11:48:35

QNo.8076757

困ってます

質問者が選んだベストアンサー

> 通常のエディタで開くことはもちろん、手作業で行うことは気が遠くなってしまいます。

そういうことでしたら、思いつくのは下記の様な方法でしょうか。

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ファイルを開いてコピーすれば良いかと。

投稿日時 - 2013-05-10 11:03:50

補足

C++で抽出プログラムを作成しました。
今のところうまく動いています。

投稿日時 - 2013-05-21 18:25:39

お礼

ありがとうございました。

投稿日時 - 2013-05-10 11:40:09

ANo.2

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

pg_dumpall で出力したダンプファイルをテキストエディタで開いてみれば分かりますが、通常のSQL文が並んでいるだけです。

したがって、リストアしたいテーブルのCREATE文やCOPY文をダンプファイルから抜き出した新たなファイルを作って psql に流し込めば、任意のテーブルだけリストアする事も出来るかと。

投稿日時 - 2013-05-10 00:23:40

お礼

root139様、ご回答ありがとうございます。
おっしゃるとおりですが、但しバックアップファイルはおおよそ35Gb程度あり、おおよそ100テーブルが含まれます。
通常のエディタで開くことはもちろん、手作業で行うことは気が遠くなってしまいます。

そこで、ストリームエディタを使用するなど、ご経験のある方があればお聞かせいただきたいと思います。

投稿日時 - 2013-05-10 08:06:01

あなたにオススメの質問