PostgreSQLのデータベースをコピー
PostgreSQL中のデータベースをまるごとコピーして欲しいというリクエスト。
以前のエントリでcreatedbを使った手法を書きましたが、コピーされるオリジナルが忙しいDBだとロックの都合でこんなエラーがでます。
$ createdb --template=original_db copy_db LOG: 文: CREATE DATABASE copy TEMPLATE original_db; createdb: データベースの生成に失敗しました:ERROR: 元となるデータベース"original_db"は他のユーザによってアクセスされています DETAIL: 他にこのデータベースを使っている 96 個のセッションがあります。
そこでdumpとrestoreを使ってコピー。
まずコピー先のDBを作成。
$ createdb copy_db ; LOG: 文: CREATE DATABASE copy_db;
dumpの出力をそのままrestoreに食わせる。ラージオブジェクトがなければ-bは不要。
$ pg_dump -Ft -b original_db | pg_restore -d copy_db