アプリ版:「スタンプのみでお礼する」機能のリリースについて

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でも調べてみたのですが、該当するページが見あたりません。
お手数ですがご教授ください。

A 回答 (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-p …

b. スクリプト言語を使って対象のテーブルの箇所を抽出する
 perl や ruby などを使えば、対象部分を抽出するプログラムが割りと簡単に作れるかと思います。

c. サイズの大きいファイルも扱えるエディタを使って抽出する
 例えば、 vim などではサイズが大きくてもさほど不自由なく編集はできたと思います。
 検索機能で該当箇所への移動・選択を行い、新旧の2ファイルを開いてコピーすれば良いかと。

この回答への補足

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

補足日時:2013/05/21 18:25
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/10 11:40

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



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

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

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

お礼日時:2013/05/10 08:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す