PostgreSQL の dump をテーブルごとに分割する pg_dump_splitter.pl

pg_dump で (-t オプションなしで) 出力したファイルは、すべてのテーブルのデータが一緒になっているわけです。
が、バックアップが必要な時って「データベース全体を復旧したい」だけではなくて、「このテーブルのデータ間違って消しちゃった(updateしちゃった)から戻したい!」みたいなことが多々ある。
ダンプが大きくなると、エディタで開いて探してコピペして……みたいなこともできなくて困る。てことで、結構前に書いたのを晒します。

Coderepos に上げてあります。http://coderepos.org/share/browser/lang/perl/misc/pg_dump_splitter/pg_dump_splitter.pl

pg_dump_splitter.pl [-t tablename] [-i input_encoding] [-o output_encoding] [-a] pg_dump.out

[options]
   -t: output only "tablename"
   -a: output all rows (by default, omit invalid encoding rows)
   -i: input encoding name (default utf-8)
   -o: input encoding name (default utf-8)

実行すると、カレントディレクトリに dump を分割した *.sql がバラバラとできます。あとはそれを必要なものだけ使えば OK。必要なテーブル名が分かっていれば -t オプションで指定したテーブルのみファイルを作成します。
入力は一旦 Encode.pm を通して文字コードの正規性を確認しています。過去に、ダンプした SQL が文字化けしててなぜか restore できない、という悲しいことが何度かあったもので。
文字化けしたレコードは別途 _error.sql というファイルに出力されるので、手で直すなり諦めるなりしましょう。