世界を動かす技術を、日本語で。

Pgactive: PostgreSQL アクティブ-アクティブレプリケーション拡張モジュール

2025年7月16日原文(github.com)

概要

pgactive は、PostgreSQL用の アクティブ-アクティブレプリケーション拡張機能。 従来の アクティブ-スタンバイ構成 との違いと、利用ケースを整理。 論理レプリケーション 技術の役割とPostgreSQLの対応状況を解説。 アクティブ-アクティブ構成で発生する 課題 と設計上の注意点。 ライセンス やセキュリティ関連情報への参照も記載。

pgactive:PostgreSQLのアクティブ-アクティブレプリケーション拡張

  • pgactive は、PostgreSQL向け アクティブ-アクティブ型データベース 構築用レプリケーション拡張
  • データベース間で 変更内容を相互複製 する仕組み
  • 主な用途
    • 高可用性 の実現
    • アプリケーションとデータソース間の レイテンシ削減
    • 本番-テスト環境間インフラ移行 時のデータ移動
  • PostgreSQL標準の アクティブ-スタンバイ型 レプリケーションとの違い
    • アクティブ-スタンバイ: 単一インスタンスのみ書き込み可、他は参照専用
    • アクティブ-アクティブ: 複数インスタンスで同時書き込み可能

アクティブ-アクティブ構成の特徴と課題

  • アクティブ-アクティブ構成 では、クラスタ内の複数DBが同時に 書き込み受付 可能
  • 単一の真実のソース が存在しないため、アプリケーション設計に 工夫が必要
  • 主なユースケース
    • マルチリージョン高可用性クラスタ
    • アプリ-DB間の 書き込みレイテンシ低減
    • Blue/Greenデプロイ 運用
    • 双方書き込み可能なシステム間移行
  • 設計時に考慮すべき課題
    • 変更競合 の発生
    • レプリケーション遅延
    • 連番(シーケンス) など一部DB機能の制限

論理レプリケーションの役割

  • 論理レプリケーション は、変更内容を 外部システムが解釈可能なデータ形式 で転送
  • 受信側DBでの 競合検知・解決SQL変換 など柔軟な処理が可能
  • PostgreSQL 10(2017年リリース)より ネイティブサポート
  • アクティブ-アクティブ構成 実現には、追加機能が必要
  • PostgreSQLの 拡張機構 により、pgactiveのような機能追加が可能

セキュリティおよびライセンス情報

  • セキュリティ詳細 は、CONTRIBUTINGドキュメント参照
  • ライセンス は、プロジェクト付属のLicenseファイル参照

Hackerたちの意見

どうやら、Postgresの論理レプリケーションを使って、あるPostgresインスタンスでの変更を別のインスタンスに共有してるみたい。競合解決はタイムスタンプに基づく「最後の書き込みが勝ち」方式だね。競合するトランザクションは特別なテーブル(pgactive_conflict_history)に記録されるから、履歴を見たり解決したりできるよ。 https://github.com/aws/pgactive/tree/main/docs

面白そうだね。じゃあ、自分の書き込みが受け入れられたか拒否されたかは、どのくらいでわかるの?すぐにわかるの、それとも後で?

これはマルチマスターレプリケーションなの?もしPostgres本体に取り入れられたら面白いね。

なんでAWSがこれに取り組んだのか、頭をひねって考えてるんだけど…彼らの製品で使われてるのが思いつかない。RDSはブロックレプリケーションを使ってるし、Auroraは独自のSANレプリケーション層を使ってる。DMSかな?

おそらく、数週間前にリリースされたAurora DSQLだね。

うん、でもこれはあまり役に立たない気がする。少なくとも、強いACIDリレーショナルデータベースでこれをやる理由がよくわからないな。

どうやら、RDS Postgresの機能として数年前から提供されてたみたいだよ。 https://aws.amazon.com/about-aws/whats-new/2023/10/pgactive-... でも、先月になってやっとオープンソースとしてコミュニティに正式にリリースしたんだって。 https://aws-news.com/article/2025-06-09-announcing-open-sour...

Auroraは独自のSANレプリケーションレイヤーを使ってるけど、クロスリージョンレプリケーションには使われてないと思う。

リポジトリのREADMEから: 「これのユースケースには、マルチリージョンの高可用性データベースクラスターの運用が含まれます。」

AWSはpgactiveを使って「Aurora Postgres Global」を売ってると思う。https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide...

自分が何をしてるか正確にわかってない限り、これを使わない方がいいよ。一般的に、パフォーマンスやスケーラビリティを向上させる方法ではないから。

非同期みたいだね?それってトランザクションの隔離にとって大きな問題だよ。

Hacker Newsで議論の続きを見る