HerokuのpostgreSQLをHobby-devからHobby-basicに移行した時のメモ
データベースのinsertが制限を超えてあと7日で使えなくするよというメールが来てしまいました.
The database DATABASE_URL on Heroku app <app-name> has exceeded its allocated storage capacity. Immediate action is required. The database contains 10,099 rows, exceeding the Hobby-dev plan limit of 10,000. INSERT privileges to the database will be automatically revoked in 7 days. This will cause service failures in most applications dependent on this database. To avoid a disruption to your service, migrate the database to a Hobby Basic ($9/month) or higher database plan:
Hobby-devからHobby-basicに移行してといわれましたが 調べてみるとDBを直接アップグレードするわけではなく,一度有料のAdd-onを追加して,データをコピーする方法を取らないといけないようです. その時のメモです.
手順としては,
- Add-onsの追加
- DBのURLを取得
- 旧DBのバックアップ
- アプリをメンテナンスモードにする
- 新DBに旧DBのデータをコピー
- アプリの参照先を旧DBから新DBに変更
- メンテナンスモード解除
という流れです. 以下手順の説明です. <app-name> にはアプリケーションの名前を代入してください.
Add-onの追加
https://dashboard.heroku.com/apps/<app-name>/resources
のページのFind more add-ons
をクリック
Heroku Postgres
を選択
Hobby Basic
→ install Heroku Postgres
を選択
ログイン
heroku login
BDのURLを取得
heroku pg:info --app <app-name>
このような情報が表示されます.
ここで得られる 'DATABASE_URL' と 'HEROKU_POSTGRESQL_BLACK_URL' を後で使います.
念のためバックアップを取っておく
heroku pg:backups capture --app <app-name>
新DBに旧DBのデータをコピー DATABASE_URLとHEROKU_POSTGRESQL_BLACK_URLは先ほど取得したものを使ってください.
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_BLACK_URL --app <app-name>
メンテナンスモードにする
heroku maintenance:on --app <app-name>
アプリが参照するDBの切り替え HEROKU_POSTGRESQL_BLACK_URLは先ほど取得したものを使ってください.
heroku pg:promote HEROKU_POSTGRESQL_BLACK_URL --app <app-name>
DB情報確認
heroku pg:info --app <app-name>
メンテナンスモード解除
heroku maintenance:off --app <app-name>
これで完了です.