herokuのpostgresqlのプランをアップグレードした

仕事でherokuのpostgresqlのプランをアップグレードしたので、ついでにメモ的に残しておこうと思います。

参考ページ: Upgrading Heroku Postgres Databases

本当にここに書かれたまんまにしか作業してないので、上記のページを見るだけでもいいと思います…。オフィシャルだし。

standard-0からpremium-0へのアップグレード

今回はstandard-0からpremium-0へのアップグレードを行いました。
さっきのページでいうところの、Upgrade with Follower Changeoversの箇所が作業的にも楽そうだったので、これでやりました。この方法で行うと、新規にDBを作るときにDBのバージョンを指定するのをし忘れて最新バージョンのDBができてしまってバージョンの同期が取れなくなった!とかそういうことが起きないため、オススメです。
また、ダウンタイムも少なくて済むようです。

作業概要を書くと、

  1. 新しいDB(premium-0)を既存DBのfollowで作成。データがコピーされて作成される。
  2. 新しいDB(premium-0)が出来上がるのを待つ。
  3. メンテナンスモードに変更。
  4. 新しいDB(premium-0)をunfollowする。
  5. 新しいDB(premium-0)を正規DBに指定する。
  6. メンテナンスモードを解除。
  7. 動作確認後、元の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のバージョンの差異も発生しないし。


カテゴリー システム開発 | タグ   | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です