そう頻繁にはないですが、PostgreSQLの特定のデータベースを、ちょちょっとコピーしたいということがあります。
例えば、DB関連のテストをするのに、いきなり本データでやるのはリスクがあるので、そういった時にコピーデータでテストすれば安心です。
実際何度もやっているのですが、たまにしか機会が無いので、その都度やり方を調べているので自分用にメモします。
SQLでコピー
私の場合は、基本的にphpPgAdminからpostgreSQLを操作することが多いので、以下のSQLを発行します。
CREATE DATABASE 新DB名 TEMPLATE 複製元のDB名
シェル環境でコピー
こっちは未確認ですが、PostgreSQLのマニュアルに載っていたので一応。
createdb -T 複製元のDB名 新DB名
完璧なコピーとは思わない方が良い!?
ただしマニュアルには、
CREATE DATABASEは、処理を始める時に(自身を除く)バックエンドプロセスがソースデータベースに接続していないことをチェックします。しかし、コピー先のデータベースの一貫性が失われる結果になる、コピー処理中の変更ができないことを保証しません。
とあったので、完璧なコピーだとは思わない方がいいかもしれませんね(私の場合はテスト位にしか使わないのでいいのですが)。
■参考サイト(ポスグレの公式ドキュメント)
テンプレートデータベース
http://www.postgresql.jp/document/pg803doc/html/manage-ag-templatedbs.html
コメント
ありがとうございました!!
毎回、バックアップ&リストアをしていたので、とても効率的になりました。