Herokuで使っているデータベースを有料プランへ切り替える(Hobby Basicプラン)
2020/09/07
Herokuで運用しているアプリのデータベースが無料の範囲を超えてしまったので有料プランに変更した
無料のHobby Devプランから9$/monthのHobby Basicプランに変更する
Hobby Devプランは10,000レコードまでで、Hobby Basicプランは10,000,000レコードまで
単純にプランを変更するだけではなく、新しいデータベースを作成して、データをコピーする必要がある
ただ、たったの6ステップで終わるので比較的簡単
- 新しいデータベースを作成
- メンテナンスモードをオン
- 古いデータベースから新しいデータベースへデータをコピー
- データベースの切り替え
- 古いデータベースを削除
- メンテナンスモードをオフ
手順
0. 現在のデータベース状況を確認
$ heroku pg:info
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 11.8
Created: 2020-01-14 16:30 UTC
Data Size: 11.4 MB
Tables: 11
Rows: 12370/10000 (Above limits, access disruption imminent)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flexible-12541
1. 新しいデータベースを作成
$ heroku addons:create heroku-postgresql:hobby-basic
Creating heroku-postgresql:hobby-basic on ⬢ masamune-20200114... $9/month
▸ Release command executing: config vars set by this add-on will not be available until the command succeeds. Use `heroku releases:output` to view
▸ the log.
Database has been created and is available
! This database is empty. If upgrading, you can transfer
! data from another database with pg:copy
Created postgresql-flat-43568 as HEROKU_POSTGRESQL_CHARCOAL_URL
Use heroku addons:docs heroku-postgresql to view documentation
HEROKU_POSTGRESQL_CHARCOAL_URL
が追加されている
名前は適当につけられるらしい
$ heroku pg:info
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 11.8
Created: 2020-01-14 16:30 UTC
Data Size: 11.4 MB
Tables: 11
Rows: 12221/10000 (Above limits, access disruption imminent)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flexible-12541
=== HEROKU_POSTGRESQL_CHARCOAL_URL
Plan: Hobby-basic
Status: Available
Connections: 0/20
PG Version: 12.3
Created: 2020-09-06 14:45 UTC
Data Size: 7.9 MB
Tables: 0
Rows: 0/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flat-43568
2. メンテナンスモードをオン
移行作業中に新しいデータが挿入されないようにアプリをメンテナンスモードにしておく
heroku maintenance:on
3. 古いデータベースから新しいデータベースへデータをコピー
$ heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_CHARCOAL_URL
▸ WARNING: Destructive action
▸ This command will remove all data from CHARCOAL
▸ Data from DATABASE will then be transferred to CHARCOAL
▸ To proceed, type masamune-20200114 or re-run this command with --confirm masamune-20200114
> masamune-20200114
Starting copy of DATABASE to CHARCOAL... done
Copying... done
データ入った
レコード数が一致していないのは謎
アプリ側のデータではなく、Heroku側が使っているデータだと思う
$ heroku pg:info
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 11.8
Created: 2020-01-14 16:30 UTC
Data Size: 11.4 MB
Tables: 11
Rows: 12170/10000 (Above limits, access disruption imminent)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flexible-12541
=== HEROKU_POSTGRESQL_CHARCOAL_URL
Plan: Hobby-basic
Status: Available
Connections: 0/20
PG Version: 12.3
Created: 2020-09-06 14:45 UTC
Data Size: 10.6 MB
Tables: 11
Rows: 12431/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flat-43568
4. データベースの切り替え
$ heroku pg:promote HEROKU_POSTGRESQL_CHARCOAL_URL
Ensuring an alternate alias for existing DATABASE_URL... HEROKU_POSTGRESQL_BLACK_URL
Promoting postgresql-flat-43568 to DATABASE_URL on ⬢ masamune-20200114... done
Checking release phase... pg:promote succeeded. It is safe to ignore the failed Detach DATABASE (@ref:postgresql-flexible-12541) release.
メインのデータベースがHEROKU_POSTGRESQL_CHARCOAL_URL
になっている
古いデータベースにはHEROKU_POSTGRESQL_BLACK_URL
という名前がつけられている
$ heroku pg:info
=== DATABASE_URL, HEROKU_POSTGRESQL_CHARCOAL_URL
Plan: Hobby-basic
Status: Available
Connections: 0/20
PG Version: 12.3
Created: 2020-09-06 14:45 UTC
Data Size: 10.7 MB
Tables: 11
Rows: 12431/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flat-43568
=== HEROKU_POSTGRESQL_BLACK_URL
Plan: Hobby-dev
Status: Available
Connections: 0/20
PG Version: 11.8
Created: 2020-01-14 16:30 UTC
Data Size: 11.4 MB
Tables: 11
Rows: 12121/10000 (Above limits, access disruption imminent)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flexible-12541
5. 古いデータベースを削除
$ heroku addons:destroy HEROKU_POSTGRESQL_BLACK_URL
▸ WARNING: Destructive Action
▸ This command will affect the app masamune-20200114
▸ To proceed, type masamune-20200114 or re-run this command with --confirm masamune-20200114
> masamune-20200114
Destroying postgresql-flexible-12541 on ⬢ masamune-20200114... done
古いデータベースが消えて、1つになっている
$ heroku pg:info
=== DATABASE_URL, HEROKU_POSTGRESQL_CHARCOAL_URL
Plan: Hobby-basic
Status: Available
Connections: 0/20
PG Version: 12.3
Created: 2020-09-06 14:45 UTC
Data Size: 10.7 MB
Tables: 11
Rows: 12431/10000000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-flat-43568
6. メンテナンスモードをオフ
heroku maintenance:off
7. おわり
動作確認をして問題がなかったら完了
もちろん古いデータベースを削除する前に動作確認をする