Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pgrollで実現するスキーマブルーグリーンデプロイメント

nnaka2992
December 26, 2023

 pgrollで実現するスキーマブルーグリーンデプロイメント

第44回 PostgreSQLアンカンファレンス@オンライン
https://pgunconf.connpass.com/event/304692/

2023/10にリリースされたPostgreSQLでテーブルスキーマの並行稼働やオンラインDDLを可能にするツールであるpgrollを紹介します。

pgrollを利用することでDevOpsやAgileといった頻繁なアプリケーションリリースを行う組織において、データベースのスキーマ変更がボトルネックにならない開発を行えるかもしれません。

デモで利用したコードとデモのgif
https://github.com/nnaka2992/pgroll_demo

アドベントカレンダーでpgrollの話を書いたので合わせて読んでいただけると理解が深まるかもしれません
https://zenn.dev/nnaka2992/articles/blue_grean_on_postgres_with_sqldeff_and_pgroll

nnaka2992

December 26, 2023
Tweet

More Decks by nnaka2992

Other Decks in Programming

Transcript

  1. pgrollの紹介 5 pgroll is an open source command-line tool that

    offers safe and reversible schema migrations for PostgreSQL by serving multiple schema versions simultaneously. pgrollはオープンソースのコマンドラインツールで、複数のス キーマバージョンを同時に提供することで、 PostgreSQLのス キーマ移行を安全かつ可逆的に行います。 https://github.com/xataio/pgroll/blob/main/README.md
  2. pgrollの紹介 6 pgrollの機能 - ゼロダウンタイムの移行 - 古いスキーマと新しいスキーマの並行稼働 - 自動的なカラムのフィリング -

    即時ロールバック - 既存のスキーマのサポート - PostgreSQL 14以降のすべてのPostgreSQL対応 - すべて=RDS/Aurora/CloudSQLなどのマネージドPostgreSQL https://github.com/xataio/pgroll/blob/main/README.md
  3. pgrollの紹介 7 pgrollの主なコマンド - pgroll init - 対象のデータベースでpgrollを利用するのに必要なスキーマ・関数などを作成す る -

    pgroll start - 対象のテーブルに対してスキーママイグレーションを開始する - pgroll complete - 対象のテーブルのスキーママイグレーションを完了させる - pgroll rollback - 対象のテーブルのスキーママイグレーションを中止する - pgroll status - 対象のテーブルのステータスを確認する
  4. 背景 14 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック

    一つのバージョンを利用するアプリケーション で障害が発生しても、残りのバージョンが正常 に稼働する
  5. 背景 15 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック

    スキーマバージョンが平行稼働することで、 DDL実行に伴う停止時間がなくなる オンラインDDLである程度対応可能だが、 PostgreSQLのオ ンラインDDLは限定的
  6. 背景 16 アプリケーションのように データベースもリッチなデプロイメントをしたい - 障害の影響を減らす - 停止時間をなくす - 簡単なロールバック

    新旧のスキーマバージョンが稼働することで、 新バージョンで障害が発生してもスムーズに 旧バージョンにロールバックできる。
  7. 手法 17 pgrollの並行でスキーマを運用する機能を利用する 1. pgrollによるスキーママイグレーションを開始する 2. 新しいバージョンが利用可能になるまで待機する 3. 新しいバージョンのアプリケーションを一部リリースする 4.

    新しいバージョンのアプリケーションの実行に問題がないことを確認する 5. 順次残りの旧アプリケーションに新しいバージョンを適用する 6. pgrollによるスキーママイグレーションを完了する
  8. 参考 21 - pgroll - https://github.com/xataio/pgroll - Introducing pgroll: zero-downtime,

    reversible, schema migrations for Postgres - https://xata.io/blog/pgroll-schema-migrations-postgres - デモで利用したコード - https://github.com/nnaka2992/pgroll_demo