2008年2月24日日曜日

PostgreSQLに存在する特定データベースの全てのテーブルをそれぞれSQLファイルでダンプする

例えば、baby_goodsというデータベースがあって、その中に、foods, toys, maternity_articlesなんてテーブルたちがあったとします。

それを一つのSQLファイルにダンプする事はpg_dumpでそのまま可能なんですけど、1テーブル1SQLファイルにしたかったので、こんなワンライナーでやったという話です。
$ pg_dump -d -O -c baby_goods | ¥
grep 'CREATE TABLE' | ¥
perl -pe 's/CREATE TABLE (.+) \(/pg_dump -d -O -c --table=$1 baby_goods \> $1\.sql/' > ¥
create_table_list.sh

create_table_list.shで中身を確認して実行。
というわけです。

ほんとはcreate_table_list.shなんて作りたくなくて、
pg_dump -d -O -c --table=TABLE_NAME baby_goods > TABLE_NAME.sql

この部分をそのまま実行するってどうやればいいのかわからなくてファイルに書き出したというわけです。

んー、出来そうな気がするんだけどなー。

[追記:2008/02/25 22:55]
なんと、| shだけでよかったのか!
$ pg_dump -d -O -c baby_goods | ¥
grep 'CREATE TABLE' | ¥
perl -pe 's/CREATE TABLE (.+) \(/pg_dump -d -O -c --table=$1 baby_goods \> $1\.sql/' | sh

でよかったというわけですね。
[Linux]シェルを覚えた経緯を詳し目に書いてみるが参考になりました!

0 件のコメント:

久しぶりにブログを書く

最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...