PostgreSQLで特定のデータベースをコピーする

そう頻繁にはないですが、PostgreSQLの特定のデータベースを、ちょちょっとコピーしたいということがあります。
例えば、DB関連のテストをするのに、いきなり本データでやるのはリスクがあるので、そういった時にコピーデータでテストすれば安心です。

実際何度もやっているのですが、たまにしか機会が無いので、その都度やり方を調べているので自分用にメモします。

SQLでコピー

私の場合は、基本的にphpPgAdminからpostgreSQLを操作することが多いので、以下のSQLを発行します。

CREATE DATABASE 新DB名 TEMPLATE 複製元のDB名

シェル環境でコピー

こっちは未確認ですが、マニュアルに載っていたので一応。

createdb -T 複製元のDB名 新DB名

完璧なコピーとは思わない方が良い!?

ただ、

CREATE DATABASEは、処理を始める時に(自身を除く)バックエンドプロセスがソースデータベースに接続していないことをチェックします。しかし、コピー先のデータベースの一貫性が失われる結果になる、コピー処理中の変更ができないことを保証しません。

とあるので、完璧なコピーだとは思わない方がいいかもしれませんね(私の場合はテスト位にしか使わないのでいいのですが)。

■参考サイト(ポスグレの公式ドキュメント)
テンプレートデータベース
http://www.postgresql.jp/document/pg803doc/html/manage-ag-templatedbs.html