HerokuでDBのアップデート等を行うときの作業の流れ

129 views Tweet
wakairo @wakairo
最終更新

PostgreSQLのメジャーバージョンを上げるときなど、通常のデータの読み書きとは異なる更新をDBに対して行うことがあります。

ここではHerokuの公式ドキュメントである「Heroku Postgres データベースのバージョンのアップグレード」を参考に、このようなアップデート等の変更をDBに行うときの大まかな流れをご紹介します。

DBにアップデート等の変更を行うときの作業の流れ

新たなDBを作成する

メジャーバージョンを上げるといった大きな更新をするときには、 何かあったときにすぐに戻せるよう、元のDBには手を入れずそのままにして温存します。 代わりに、addons:createコマンドなどで、大きな更新を行う別の新たなDBを作成します。

DBへの書き込みを停止させて、データを完璧に複製する

addons:createコマンドの--followオプションやpg:copyコマンドを利用して、 元のDBから新たなDBにデータをコピーします。 この際、適切にアプリをメンテナンスモードにするなどして、元のDBへの書き込みを停止させ、 停止している間に元のDBのデータの全てが新たなDBに複製されている状態にします。

ちなみに、公式ドキュメントには記載がありませんが、 バックアップが短時間で終わるデータの規模であるならば、 トラブルに備えてこの書き込みが停止しているタイミングで元のDBのバックアップを手動で作成しても良いように思います。

新たなDBに手を加える

メジャーバージョンの更新などの必要があれば、新たなDBに手を加えます。

アプリの接続先を元のDBから新たなDBに切り替える

pg:promoteコマンドを利用して、アプリが読み書きする対象を新たなDBに切り替えます。

アプリを公開してテストする

メンテナンスモードを解除するなどして、アプリを公開状態に戻します。 本番環境が問題なく動いているかテストを行います。 何かしら問題がある場合には、アプリの接続先を元のDBに迅速に戻すことで、被害が最小化できるはずです。

不要になったDBを削除する

元のDBなどが不要になった場合など、addons:destroyコマンドなどを利用して、不要になったDBを削除します。

(参考)ステージングアプリを利用したテスト

より安全にDBの更新などを行うために、本番のアプリのDBを更新する前に、ステージングのアプリでDBの更新をテストすることも可能です。詳細はPostgreSQL メジャーバージョンのアップグレードのテストをご覧ください。

0
Raw
https://www.techtips.page/ja/comments/318