PostgreSQL 18とその後:技術者Blog

FUJITSU Limited Software Open Innovation Business Unit Data Management Division Senior Director Amit Kapila

Amit Kapila

FUJITSU Limited
Software Open Innovation Business Unit Data Management Division
Senior Director

私はニューヨークで開催された「PGConf NYC 2025」に参加し、PostgreSQLの論理レプリケーションの今後の方向性について発表しました。本記事では、論理レプリケーションの進化と、PostgreSQL 18で導入された論理レプリケーションの機能強化についてご紹介します。

PostgreSQLの進化 - 論理レプリケーションの発展

PostgreSQLの論理レプリケーションは、初期の論理デコーディングの登場から継続的な機能強化を経て、データベースの基本機能の一つとして成長してきました。現在では、高可用性、スケーラビリティ、さらには異なるデータベースシステムとの連携など、多岐にわたるユースケースに対応できる強力なツールとなっています。

PostgreSQLの論理レプリケーションの発展フローチャート

PostgreSQL 18の機能強化と新機能

PostgreSQL 18では、論理レプリケーションに多くの改善が加えられました。変更に関するすべての機能一覧は、PostgreSQLオフィシャルドキュメントの「PostgreSQL: Documentation: 18: E.1. Release 18」でご確認いただけます。

それでは、PostgreSQL 18のいくつかの機能強化についてご紹介しましょう。

コンフリクト検出とロギング

PostgreSQL 18では、新しい種類のコンフリクト検出が導入され、コンフリクト情報の管理が大幅に改善されました。

新しいコンフリクトの種類

  • INSERT_EXISTS または UPDATE_EXISTS (重複行の挿入または更新)

    NOT DEFERRABLEな一意性制約に違反する行を挿入または更新しようとした場合に発生します。

  • UPDATE_ORIGIN_DIFFERS または DELETE_ORIGIN_DIFFERS (更新/削除元の相違)

    以前に別のオリジン(発生元)によって変更された行を更新または削除しようとした場合に発生します。

  • UPDATE_MISSING または DELETE_MISSING (更新/削除対象行の不一致)

    更新または削除しようとしたタプル(行)が見つからなかった場合に発生します。

  • MULTIPLE_UNIQUE_CONFLICTS (複数の一意性コンフリクト)

    複数のNOT DEFERRABLEな一意性制約に違反する行を挿入または更新しようとした場合に発生します。

並列処理の有効化

PostgreSQL 18では、大規模トランザクションの論理レプリケーションを高速かつ効率的に行うため、並列処理がデフォルトの動作となりました。
従来、論理レプリケーションにおいて、サブスクライバーはパブリッシャーのトランザクションがコミットされるまで待機する必要がありましたが、並列処理が有効化されることで、コミットを待たずに即座に処理を開始できます。これにより、レプリケーションの遅延が最小限に抑えられ、より高いスループットが期待できます。

設定方法

サブスクリプションパラメータ「streaming」に「parallel」を設定します。これはPostgreSQL 18からのデフォルト値です。

Loading component...

並列度は、サブスクリプションパラメータ「max_parallel_apply_workers_per_subscription」によって調整できます。

Loading component...

pg_createsubscriberの機能強化

運用の利便性を高めるため、pg_createsubscriberツールにいくつかの機能が改善されました。レプリケーションワークフローを簡素化する主な改善点については、以下のブログ記事(英語)で解説しています。

Loading component...

PostgreSQL 19とその後

最後に、コミュニティで活発に行われている議論の1つを紹介して、この記事を締めくくりたいと思います。なお、ここで紹介する機能が次のリリースまたは将来のリリースに必ず提供されるものではないことご承知おきください。

Loading component...

Loading component...

この機能を利用するためには、サブスクリプションの作成時または変更時に、特定の新しいオプションを追加して、コンフリクト履歴を格納するテーブルを指定します。

Loading component...

これにより、ユーザーは標準のSQLクエリを使ってコンフリクト履歴を簡単に参照、集計、分析できるようになり、レプリケーションの健全性を監視し、問題解決を効率的に行うことが可能になります。

  • ログでコンフリクトを報告

    Loading component...

  • コンフリクトの詳細がテーブルに保存

    Loading component...

最後に

Loading component...

関連リンク

PGConf NYC 2025での講演内容については、以下をご覧ください。

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

2025年10月20日公開

富士通のソフトウェア公式チャンネル(YouTube)

富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。

Loading component...

Loading component...