- この記事では、Postgresデータベースの変更を捕捉するさまざまな方法について論じています。
- Sequinという企業は、SalesforceやHubSpotのようなサードパーティAPIからデータを同期し、開発者が自分たちのPostgresデータベースを使ってAPIデータを構築できるようにしています。
- Postgresは、テーブルの変更に基づいてワークフローをトリガーしたり、他のデータストア、システム、またはサービスへリアルタイムでデータをストリーミングしたりするなど、移動中のデータを捕捉するための複数の選択肢を提供します。
- 最も簡単なアプローチは、Postgresのプロセス間通信機能であるListen/Notifyを使うことです。これはpublish-subscribeパターンの実装ですが、「最大1回」の配信セマンティクスや、ペイロードサイズが8000バイトに制限されるといった制約があります。
- 別の方法はテーブルを直接ポーリングすることで、この場合は各テーブルに、行が更新されるたびに更新される
updated_atカラム、またはそれに類するものが必要です。しかしこの方法では、行が削除されたことを検知できず、差分も得られません。
- Postgresは、別のPostgresデータベースへのストリーミングレプリケーションをサポートしており、これをアプリケーションの変更を捕捉するために利用できます。ただし、この方法は複雑で、
postgresql.confを調整する必要があるかもしれません。
- 変更は、変更内容を記録する監査テーブルからも捕捉できます。このアプローチはレプリケーションスロットを使う方法に似ていますが、より手動寄りです。
- 外部データソースへの読み書きを可能にするPostgresの機能である外部データラッパー(FDW)もあります。ただし、この方法が推奨されるのは非常に限定的な状況だけです。
- 結論として、Postgresで変更を捕捉する最善の方法はユースケースによって異なります。Listen/Notifyは重要度の低いイベントの捕捉に向いており、変更のポーリングは単純なユースケースに対する直感的な解決策で、レプリケーションは堅牢な解決策として最良の選択です。レプリケーションが難しすぎるなら、監査テーブルが優れた中間的解決策になるかもしれません。
1件のコメント
Hacker Newsの意見