PostgreSQL の話。
テスト用に DB のコピーを作る時、今までは「新しい DB を createdb で作成」「元の DB を pg_dump で丸々ダンプ(pg_dumpall に非ず)」「psql でダンプファイルから新しい DB にリストア」「ユーザ権限関係とか調整」とか色々作業してたんだけど、一発で DB のコピーできたんだね。
新しい DB を作る時に、
$ createdb -T old_db new_db
って感じでテンプレートデータベースとして元の DB を指定すれば、この DB の内容丸コピー(データも含めて)で新しい DB が作成されるんやね~
知らんかった。
まあ、そんなに何度もやることじゃないので、pg_dump 実行してほげほげで困らなかった(もう、この方法を知ってしまったので今後は pg_dump ほげほげ面倒くさいけれど(^^;)んだけど、今後はこの方法で一発やね。
ただ、この時、old_db がその瞬間使われていたら、
createdb: database creation failed: ERROR: source database "old_db" is being accessed by other users
みたいなエラーが出ちゃう。
この時は、old_db へのセッションプロセスを全部 kill しちゃおう。
$ ps -auxww|grep post
とかすれば、
postgres 7186 0.0 0.0 6468 1600 pts/2 S+ 14:20 0:00 psql old_db
こんなプロセスが引っかかるので、
$ kill -9 7186
とかして殺していく。
これで、createdb が問題なく出来るぞ。むふん。