Aurora PostgreSQL pgoutput CDC Bridge¶
概念概覽
Aurora vs RDS PostgreSQL CDC Plugin 差異¶
核心知識¶
Aurora vs RDS PostgreSQL CDC Plugin 差異¶
RDS PostgreSQL 原生內建 wal2json,但 Aurora PostgreSQL 不支援 wal2json,只支援 PostgreSQL 10+ 內建的 pgoutput output plugin。
建立 Slot 時必須指定正確的 plugin:
Node.js 套件用法調整¶
使用 pg-logical-replication 套件時,需切換為 PgoutputPlugin 並建立 Publication:
const { LogicalReplicationService, PgoutputPlugin } = require('pg-logical-replication');
const plugin = new PgoutputPlugin({
protoVersion: 1,
publicationNames: ['game_publication']
});
service.subscribe(plugin, 'game_slot_snapshot');
部署前置確認點¶
- 部署前先確認是 RDS PostgreSQL 還是 Aurora PostgreSQL
- Aurora 一律使用 pgoutput,誤用 wal2json 會直接在建立 Slot 時失敗
- message format 與 wal2json 不同,套件層需適配解析邏輯
經驗教訓¶
-
Aurora PostgreSQL 不支援 wal2json,這是 Aurora 架構限制,不是版本問題,無法透過升級解決
-
文件或 runbook 必須明確標示 Aurora/RDS 兩種情境的配置差異,否則維護時極易踩坑
-
pgoutput 需要額外建立 Publication(CREATE PUBLICATION),wal2json 不需要,這是遷移時最容易遺漏的步驟
常見陷阱¶
-
在 Aurora 上使用 wal2json 會直接在 pg_create_logical_replication_slot 時報錯,整個 CDC 流程無法啟動
-
pgoutput 的 message 格式(Protobuf-like binary)與 wal2json(JSON 文字)完全不同,套件若混用會造成解析失敗但不報明顯錯誤
最佳實踐¶
-
部署 CDC Bridge 前先執行 SELECT version() 確認是 Aurora 還是 RDS,再決定 plugin
-
在 K8s ConfigMap 或環境變數中明確設定 REPLICATION_PLUGIN=pgoutput|wal2json,不要寫死在程式碼裡
-
建立 pg_replication_slots 的監控告警,偵測 inactive slot 避免 WAL 無限堆積
相關概念¶
- eks-qa-nodegroup-debug
- Mutation Pipeline DB-backed Idempotency Backstop
- RDS Multi-Env Replication Slot Conflict
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-04-14 | c68e794c-bec7-485d-8225-971a172f956c | 確立 Aurora PostgreSQL 必須使用 pgoutput(不支援 wal2json),並給出完整的 Node.js Bridge 實作範本與 npm 套件用法 |