Heroku Postgres プランをダウングレードする

Heroku Postgres プランをダウングレードしたい場合、以下の方法が考えられる。

  1. Follower を作成した上で切り替えを行う
  2. 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 Centerdata: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
...