Heroku Postgres プランをダウングレードしたい場合、以下の方法が考えられる。
- Follower を作成した上で切り替えを行う
- addons upgrade コマンドを利用する
1. Follower を作成した上で切り替えを行う
データベースに対して Follower を作成し後に Promote する方法。ただ、データベースサイズをダウングレードする場合、この方法では1つ下のサイズにしかダウングレードできない。
$ heroku addons:create heroku-postgresql:private-0 --follow DATABASE_URL
Creating heroku-postgresql:private-0 on ⬢ tetsuya-playground... !
▸ An error was encountered when contacting the add-on partner to create heroku-postgresql:private-0: Database followers are not supported
▸ more than 1 levels below this leader's plan. Please provision at least a private-3 plan.
急激なサイズ変更によるパフォーマンス劣化を防ぐための策として有効であるが、元のサイズに戻しても影響がないことがわかっている場合には少し不便だった。
2. addons upgrade コマンドを利用する
一方 Heroku Postgres now supports heroku addons:upgrade でアナウンスされた addons:upgrade
コマンドを利用すると簡単に戻すことができる。公式ドキュメントは Updating with addons upgrade にある。
$ heroku addons:downgrade DATABASE_URL heroku-postgresql:private-0
Changing postgresql-rugged-16062 on tetsuya-playground from heroku-postgresql:private-4 to heroku-postgresql:private-0... done, $300/month
Your database's plan is being changed.
This will trigger a maintenance that you can run with heroku pg:maintenance.
コマンド実行後 pg:info
で Status を確認すると Upgrading plan: replacing primary, maintenance scheduled
となっていて、メンテナンスがスケジュールされていることがわかる。
$ heroku pg:info
=== DATABASE_URL
Plan: Private 4
Status: Upgrading plan: replacing primary, maintenance scheduled
...
手動でメンテナンスを実行するには pg:maintenance:run
か、Data Maintenance CLI Commands | Heroku Dev Center の data:maintanance:run
コマンドが利用できる。
$ heroku data:maintenances:run postgresql-rugged-16062 --confirm tetsuya-playground
Triggering maintenance... maintenance triggered
メンテナンスが完了すると、ダウングレードされたことがわかる
$ heroku pg:info
=== DATABASE_URL
Plan: Private 0
Status: Available
...