仕事でherokuのpostgresqlのプランをアップグレードしたので、ついでにメモ的に残しておこうと思います。
参考ページ: Upgrading Heroku Postgres Databases
本当にここに書かれたまんまにしか作業してないので、上記のページを見るだけでもいいと思います…。オフィシャルだし。
standard-0からpremium-0へのアップグレード
今回はstandard-0からpremium-0へのアップグレードを行いました。
さっきのページでいうところの、Upgrade with Follower Changeoversの箇所が作業的にも楽そうだったので、これでやりました。この方法で行うと、新規にDBを作るときにDBのバージョンを指定するのをし忘れて最新バージョンのDBができてしまってバージョンの同期が取れなくなった!とかそういうことが起きないため、オススメです。
また、ダウンタイムも少なくて済むようです。
作業概要を書くと、
- 新しいDB(premium-0)を既存DBのfollowで作成。データがコピーされて作成される。
- 新しいDB(premium-0)が出来上がるのを待つ。
- メンテナンスモードに変更。
- 新しいDB(premium-0)をunfollowする。
- 新しいDB(premium-0)を正規DBに指定する。
- メンテナンスモードを解除。
- 動作確認後、元のDB(standard-0)を削除する。
という感じです。
1. 新しいDB(premium-0)を既存DBのfollowで作成
元のDB(standard-0)のURLが、HEROKU_POSTGRESQL_IVORY_URLとします。
app-nameは各自のアプリ名に置き換えてください。
heroku addons:create heroku-postgresql:premium-0 --follow HEROKU_POSTGRESQL_IVORY_URL --app app-name
2. 出来上がるのを待つ
以下のコマンドを打って、待ちましょう。
heroku pg:wait --app app-name
終わったら、次のコマンドを打って、確認しましょう。
heroku pg:info --app app-name
こんなのがでるでしょう。
新しくできたDBは、HEORKU_POSTGRESQL_BLUEのようですね。
=== HEROKU_POSTGRESQL_BLUE_URL Plan: Premium 0 Status: Available (略) Following: HEROKU_POSTGRESQL_IVORY Behind By: 0 commits (略) === HEROKU_POSTGRESQL_IVORY_URL, DATABASE_URL Plan: Standard 0 Status: Available (略) Followers: HEROKU_POSTGRESQL_BLUE (略)
3. メンテナンスモードにする
DBを差し替えるので、メンテナンスモードにします。
heroku maintenance:on --app app-name heroku ps:scale worker=0 --app app-name
4. 新しいDB(premium-0)をunfollowする
unfollowします!したからといって、データが消失することはありません。
heroku pg:unfollow HEROKU_POSTGRESQL_BLUE_URL --app app-name
5. 新しいDB(premium-0)を正規DBに指定する
URLが最後に付かないことに注意しましょう。
heroku pg:promote HEROKU_POSTGRESQL_BLUE --app app-name
ちゃんと変更されたか確認します。
heroku pg:info --app app-name
DATABASE_URLがBLUEのほうに紐付いてるのを確認しました。OKです。
=== HEROKU_POSTGRESQL_BLUE_URL, DATABASE_URL Plan: Premium 0 Status: Available (略) Forked From: HEROKU_POSTGRESQL_IVORY (略) === HEROKU_POSTGRESQL_IVORY_URL Plan: Standard 0 Status: Available (略) Forks: HEROKU_POSTGRESQL_BLUE (略)
6. メンテナンスモードを解除
メンテナンスモードを解除して、動作確認作業しましょう。
heroku maintenance:off --app app-name heroku ps:scale worker=1 --app app-name
7. 動作確認後、元のDB(standard-0)を削除する
元のDBは不要になるので、削除しましょう。削除し忘れると毎月50ドルかかるので。
ちゃんと、動作確認してから削除しましょう!!
ちゃんと、動作確認してから削除しましょう!!
大事なことなので2回書きました。
heroku addons:destroy HEROKU_POSTGRESQL_IVORY --app app-name
感想
standard-0以上から上位のプランへの変更は、この方法がよさそうですね。
pg:copyするよりは楽かなーと思いました。DBのバージョンの差異も発生しないし。