HerokuのPostgreSQLのアップグレード手順 #heroku #dev #postgresql version 10
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
HerokuのPostgreSQLのアップグレード手順 #heroku #dev #postgresql
PostgreSQLのバージョンを上げるときとか、プランを変更する場合に。
## 公式のガイド
- [Upgrading Heroku Postgres Databases | Heroku Dev Center](https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases)
- [Heroku PGBackups | Heroku Dev Center](https://devcenter.heroku.com/articles/heroku-postgres-backups)
## 基本戦略
新規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`
1. メンテナンスモードON `heroku maintenance:on -a sushi`
- workerのDynoなど動いていたらそれも停める `heroku ps:scale worker=0 -a sushi`
1. バックアップ `heroku pg:backups capture DATABASE_URL -a sushi`
1. バックアップが正常に取れたのを確認 `heroku pg:backups -a sushi`
1. データコピー `heroku pg:copy DATABASE_URL {NEW_DB_NAME} -a sushi`
1. 新規DBを昇格 `heroku pg:promote {NEW_DB_NAME} -a sushi`
1. 昇格を確認 `heroku config -a sushi`
- `DATABASE_URL` が変わったのを確認する
1. メンテナンスモードOFF `heroku maintenance:off -a sushi`
- 停めたworkerのDynoなどあれば再開 `heroku ps:scale worker=1 -a sushi`
1. 動作確認いろいろ
1. バックアップ設定確認 `heroku pg:backups schedules -a sushi`
- `DATABASE_URL` がバックアップ対象であることを確認する
1. 旧DBを破棄 `heroku addons:destroy {OLD_DB_NAME} -a sushi`
1. バックアップが正常に取れたのを確認 `heroku pg:backups -a sushi`
## 注意事項
- `sushi` はアプリケーションの名前
- 随時 `heroku pg:info -a sushi` でDBの状態を確認しつつ進むこと
- これでDBの名前やPostgreSQLのバージョンがわかる
- [Postico](https://eggerapps.at/postico/)などクライアントソフトを使っている場合は接続先のURLが変わるので変更を忘れないこと- [Postico](https://eggerapps.at/postico/)などクライアントソフトを使っている場合は接続先のURLが変わるので変更を忘れないこと
- Standard以上のプランではsslmodeをONにして接続が必要になる。ただし、pg側の証明書がオレオレ証明書なので、 `ssl: { rejectUnauthorized: false }` のような設定が必要。
PostgreSQLのバージョンを上げるときとか、プランを変更する場合に。
公式のガイド
基本戦略
新規DBを作成し(その時点でのデフォルトバージョンになる、プラン変更すればそのプランのものができる)、そのDBに今使っているDBのデータをコピー。使うDBを、新しく作ったDBに向け直す。
アプリケーション側で DATABASE_URL
に接続するようになっていると楽なので、もしそうでない場合はそのように変更してから作業すること。
手順
- 新規DB作成
heroku addons:create heroku-postgresql:hobby-basic -a sushi
hobby-basic
の部分は新しく使うHeroku Postgresのプランによって変更- Standard以上のプランなら
heroku pg:wait -a sushi
- メンテナンスモードON
heroku maintenance:on -a sushi
- workerのDynoなど動いていたらそれも停める
heroku ps:scale worker=0 -a sushi
- workerのDynoなど動いていたらそれも停める
- バックアップ
heroku pg:backups capture DATABASE_URL -a sushi
- バックアップが正常に取れたのを確認
heroku pg:backups -a sushi
- データコピー
heroku pg:copy DATABASE_URL {NEW_DB_NAME} -a sushi
- 新規DBを昇格
heroku pg:promote {NEW_DB_NAME} -a sushi
- 昇格を確認
heroku config -a sushi
DATABASE_URL
が変わったのを確認する
- メンテナンスモードOFF
heroku maintenance:off -a sushi
- 停めたworkerのDynoなどあれば再開
heroku ps:scale worker=1 -a sushi
- 停めたworkerのDynoなどあれば再開
- 動作確認いろいろ
- バックアップ設定確認
heroku pg:backups schedules -a sushi
DATABASE_URL
がバックアップ対象であることを確認する
- 旧DBを破棄
heroku addons:destroy {OLD_DB_NAME} -a sushi
- バックアップが正常に取れたのを確認
heroku pg:backups -a sushi
注意事項
sushi
はアプリケーションの名前- 随時
heroku pg:info -a sushi
でDBの状態を確認しつつ進むこと- これでDBの名前やPostgreSQLのバージョンがわかる
- Posticoなどクライアントソフトを使っている場合は接続先のURLが変わるので変更を忘れないこと
- Standard以上のプランではsslmodeをONにして接続が必要になる。ただし、pg側の証明書がオレオレ証明書なので、
ssl: { rejectUnauthorized: false }
のような設定が必要。