お仕事のアプリ移行の前に、ほそぼそとやっている自社サービスの http://l-engine.com で試してみた。DBのバージョンアップも出来たので一石二鳥。
準備
Addonの追加でDB追加したらHEROKU_POSTGRESQL_ROSE_URLが割り当てられた。
heroku config --app myapp
などとすると新規のURLの存在を確認できる。
バックアップ
アプリの管理画面からCapture Backupしてバックアップ作成。何かあったらこれに戻ってくる。
メンテ開始
以下の手順でメンテ開始&DBの移行。
DBのコピー
heroku maintenance:on --app myapp
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_ROSE_URL --app myapp
ここまでしたら、新しい方のインスタンスにデータがちゃんと入ったか管理画面で確認する。今回は https://postgres.heroku.com/databases からDBを選択して見た。Rowsの数値などが変わればデータの移動には成功している。
DBの切り替え
続いて、DBの切り替えを行い、メンテモードを抜ける。
heroku pg:promote HEROKU_POSTGRESQL_ROSE --app myapp
heroku maintenance:off --app myapp
確認
とりあえず何かDBに書き込まれるような操作を行って、新しいDBに反映されるのかをチェック。管理画面から下記の操作でpsqlできるとわかるのでこれをコンソールに貼り付けて実行。
heroku pg:psql --app myapp HEROKU_POSTGRESQL_ROSE
myapp::ROSE=> select * from mytable order by created_at desc
新規に書き込んだデータが無事に反映されていれば新DBで動いていることまで確認できる。