HerokuのDBプランのアップグレード
今までは、Herokuの無料プランで運営していたが、気付いたらPostgresのデータ容量が超過していた。
無料のhobby-devを利用していたが制限の10,000レコードをいつの間にか超過しており、
レコード数を削減すればこのまま無料プランで問題ないのですが、それではいたちごっこになってしまうので、これを気に有料プランへ変更してみることにしました。
DBに関しては無料プランの次がhobby-basicというプランで、レコード制限は1000倍の10,000,000レコードになるが、9$/月の費用が発生します。
今回はお試しも兼ねてアップグレードをしてみることにしました。
アップグレード手順
hobby-basicを追加する
heroku addons:create heroku-postgresql:hobby-basic -a <アプリ名>
hpbbyプランのアップグレードの場合は既存のプランをアップグレードするのではなく、既存のDBはそのままで、新しくDBを作成し、そこに既存データを移行する流れになります。
この際に新しく作成されるDBはHEROKU_POSTGRESQL_OLIVE_URLのようにHEROKU_POSTGRESQL_<カラー名>_URLのような名称で作成されます。
DBを停止する
heroku pg:wait -a <アプリ名>
対象アプリケーションをメンテナンスモードにする
heroku maintenance:on -a <アプリ名>
既存のDBを新規DBにコピーする
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_<カラー名>_URL -a <アプリ名>
上記コマンドを実行時には実行確認のためにアプリ名の入力が求められますのでアプリ名を入力する必要があります。
DBのプライマリ参照先の変更
heroku pg:promote HEROKU_POSTGRESQL_<カラー名>_URL -a <アプリ名>
メンテナンスモードの終了
heroku maintenance:off -a <アプリ名>
これでプランのアップグレード完了です。
注意点としてはhobby-basicの場合はアップグレードというよりも新規作成になるのでDBへの接続先やユーザ名、パスワードも変わるので注意が必要です。
ダウングレード手順
hobby-basicからhobby-devにデータを移行して戻す場合は10,000レコード以内に収める必要があります。
DBを停止する
heroku pg:wait -a <アプリ名>
対象アプリケーションをメンテナンスモードにする
heroku maintenance:on -a <アプリ名>
hobby-basicからhobby-devにコピーする
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_<カラー名>_URL -a <アプリ名>
上記コマンドを実行時には実行確認のためにアプリ名の入力が求められますのでアプリ名を入力する必要があります。
hobby-basicのデータを移行する必要がなければこの操作は不要です。
ただし、後続の操作でhobby-basicのデータは削除されますので必要に応じてバックアップをお願いします。
※コピーする場合はhobby-devの制限に合わせて10000レコード以内に収める必要があります。
DBのプライマリ参照先の変更
heroku pg:promote HEROKU_POSTGRESQL_<カラー名>_URL -a <アプリ名>
メンテナンスモードの終了
heroku maintenance:off -a <アプリ名>
hobby-basic DBアドオンの削除
herokuのリソース画面にアクセスして対象のアドオン(hobby-basic)を削除します。
以上をすることでhobby-basicが削除され、課金が発生しなくなります。
最後に🙇♂️
今回の機能を実際に実装して作ったサービスが以下になります。
一度、ご利用いただければと思います。
→現在、稼働を停止しております。。(閲覧自体は可能です。)
今回の機能について等々、それ以外のことでもいつでもご質問お待ちしております!