Heroku Postgres をアップグレードする手順
Heroku Postgres を Hobby Dev から有料プランにアップグレードする機会があり、色々選択肢がある中で迷い調べた内容のメモです。
結論
Hobby層をアップグレードするには、pg:copy
を使ってアップグレードを行います。手順は下記に記載されているとおりです。
Heroku Postgres データベースのバージョンのアップグレード | Heroku Dev Center
アップグレードの方法
Heroku Postgres をアップグレードする方法は以下の3つがあります。
heroku addons:upgrade
- フォロワーの切り替え
pg:copy
Heroku Postgres データベースのプランまたはインフラストラクチャの変更 | Heroku Dev Center
ただし、Hobby層(hobby-dev
と hobby-basic
)からのアップグレードをするには、pg:copy
を使うのが唯一の手段です。
pg:copy コマンドでは、サポートされているすべての Heroku Postgres プランおよびバージョン間での更新がサポートされます。さらに、これは Hobby 層のデータベースに関連する更新 (このデータベースとの間のすべての移行) のためにサポートされている唯一の方法です。
pg:copyの更新 - Heroku Postgres データベースのプランまたはインフラストラクチャの変更 | Heroku Dev Center
pg:copy
でアップグレードしていく
アップグレードしたいプランでDBを新しく用意し、pg:copy
で既存DBのレコードを移行する方法。
途中アプリをメンテナンスモードにする必要があるので、適切なタイミングを見計らってやる必要がある。
- 新しいプランのDBを用意するこの時点で Heroku Postgres が既存と新規で2種類アタッチされた状態となる。下記コマンドで確認が可能。
$ heroku addons:create heroku-postgresql:standard-0 --app hoge
$ heroku pg:info --app hoge
$ heroku pg:wait --app hoge # プロビジョニングが完了するまでローディング状態となり # プロビジョニングが完了したら available と表示される
- アプリをメンテナンスモードにする
# アプリをメンテナンスモードにする # 利用者はアプリにアクセス出来ない状態となり、DBが書き換わるのを防ぐ $ heroku maintenance:on --app hoge
- 新規のDBにデータをコピーする
以下のコマンドで表示される新しいデータベース名を確認する。(例:
HEROKU_POSTGRESQL_PINK
)$ heroku pg:info --app hoge
pg:copy
を実行してデータをコピーする。$ heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_PINK --app hoge # アプリ名の入力を求められるので入力してEnter
- 新しいデータベースをプロモートする
作成されたデータベースをプライマリデータベースにする。
$ heroku pg:promote HEROKU_POSTGRESQL_PINK
- メンテナンスモードを終了する
$ heroku maintenance:off --app hoge