おからの日記

最近,おからに改名しました

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を追加して,データをコピーする方法を取らないといけないようです. その時のメモです.

手順としては,

  1. Add-onsの追加
  2. DBのURLを取得
  3. 旧DBのバックアップ
  4. アプリをメンテナンスモードにする
  5. 新DBに旧DBのデータをコピー
  6. アプリの参照先を旧DBから新DBに変更
  7. メンテナンスモード解除

という流れです. 以下手順の説明です. <app-name> にはアプリケーションの名前を代入してください.


Add-onの追加

https://dashboard.heroku.com/apps/<app-name>/resources のページのFind more add-onsをクリック f:id:akari000:20191126005058p:plain

Heroku Postgres を選択 f:id:akari000:20191126005102p:plain

Hobby Basicinstall Heroku Postgres を選択 f:id:akari000:20191126005106p:plain

ログイン

heroku login

BDのURLを取得

heroku pg:info --app <app-name>

このような情報が表示されます.
ここで得られる 'DATABASE_URL' と 'HEROKU_POSTGRESQL_BLACK_URL' を後で使います. f:id:akari000:20191126002845p:plain

念のためバックアップを取っておく

heroku pg:backups capture --app <app-name>

新DBに旧DBのデータをコピー DATABASE_URLHEROKU_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>

これで完了です.