HerokuでDBのアップデート等を行うときの作業の流れ 233 views Post @wakairo 2024/09/20 19:39 最終更新 2024/09/20 19:46 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 メジャーバージョンのアップグレードのテストをご覧ください。
@wakairo 2024/09/20 19:39 最終更新 2024/09/20 19:46 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 メジャーバージョンのアップグレードのテストをご覧ください。
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 メジャーバージョンのアップグレードのテストをご覧ください。