HerokuのPostgreSQLのアップグレード手順 #heroku #dev #postgresql

PostgreSQLのバージョンを上げるときとか、プランを変更する場合に。

公式のガイド

基本戦略

新規DBを作成し(その時点でのデフォルトバージョンになる、プラン変更すればそのプランのものができる)、そのDBに今使っているDBのデータをコピー。使うDBを、新しく作ったDBに向け直す。

アプリケーション側で DATABASE_URL に接続するようになっていると楽なので、もしそうでない場合はそのように変更してから作業すること。

手順

  1. 新規DB作成 heroku addons:create heroku-postgresql:hobby-basic -a sushi
    • hobby-basic の部分は新しく使うHeroku Postgresのプランによって変更
    • Standard以上のプランなら heroku pg:wait -a sushi
  2. メンテナンスモードON heroku maintenance:on -a sushi
    • workerのDynoなど動いていたらそれも停める heroku ps:scale worker=0 -a sushi
  3. バックアップ heroku pg:backups capture DATABASE_URL -a sushi
  4. バックアップが正常に取れたのを確認 heroku pg:backups -a sushi
  5. データコピー heroku pg:copy DATABASE_URL {NEW_DB_NAME} -a sushi
  6. 新規DBを昇格 heroku pg:promote {NEW_DB_NAME} -a sushi
  7. 昇格を確認 heroku config -a sushi
    • DATABASE_URL が変わったのを確認する
  8. メンテナンスモードOFF heroku maintenance:off -a sushi
    • 停めたworkerのDynoなどあれば再開 heroku ps:scale worker=1 -a sushi
  9. 動作確認いろいろ
  10. バックアップ設定確認 heroku pg:backups schedules -a sushi
    • DATABASE_URL がバックアップ対象であることを確認する
  11. 旧DBを破棄 heroku addons:destroy {OLD_DB_NAME} -a sushi
  12. バックアップが正常に取れたのを確認 heroku pg:backups -a sushi

注意事項

  • sushi はアプリケーションの名前
  • 随時 heroku pg:info -a sushi でDBの状態を確認しつつ進むこと
    • これでDBの名前やPostgreSQLのバージョンがわかる
  • Posticoなどクライアントソフトを使っている場合は接続先のURLが変わるので変更を忘れないこと
  • Standard以上のプランではsslmodeをONにして接続が必要になる。ただし、pg側の証明書がオレオレ証明書なので、 ssl: { rejectUnauthorized: false } のような設定が必要。

END

Close