邏輯複製的架構與物理流複製類似(參見 第 26.2.5 節)。它由 walsender
和 apply
程序實現。walsender 程序啟動 WAL 的邏輯解碼(參見 第 47 章)並載入標準的邏輯解碼輸出外掛(pgoutput
)。該外掛將從 WAL 讀取的更改轉換為邏輯複製協議(參見 第 54.5 節),並根據釋出規範過濾資料。然後,資料透過流複製協議連續傳輸到 apply 工作程序,該工作程序將資料對映到本地表,並按照正確的事務順序應用接收到的各個更改。
訂閱資料庫上的 apply 程序始終以 session_replication_role
設定為 replica
來執行。這意味著,預設情況下,觸發器和規則在訂閱者上不會觸發。使用者可以選擇使用 ALTER TABLE
命令和 ENABLE TRIGGER
和 ENABLE RULE
子句來啟用表上的觸發器和規則。
邏輯複製 apply 程序目前僅觸發行級觸發器,而不觸發語句級觸發器。但是,初始表同步的實現類似於 COPY
命令,因此對於 INSERT
會觸發行級和語句級觸發器。
現有已訂閱表中的初始資料將被快照化,並以特殊 apply 程序的並行例項進行復制。這些特殊的 apply 程序是專用的表同步工作程序,為每個要同步的表而生成。每個表同步程序將建立自己的複製槽並複製現有資料。複製完成後,表內容將對其他後端可見。一旦現有資料被複制,工作程序將進入同步模式,該模式透過流式傳輸初始資料複製期間發生的任何更改(使用標準邏輯複製)來確保表與主 apply 程序同步。在此同步階段,更改的順序與它們在釋出者上發生的順序相同。同步完成後,表的複製控制權將交還給主 apply 程序,複製將照常繼續。
釋出(publish
)引數僅影響哪些 DML 操作將被複制。在複製現有表資料時,初始資料同步不考慮此引數。
如果在複製過程中表同步工作程序失敗,apply 工作程序將檢測到失敗並重新生成表同步工作程序以繼續同步過程。此行為可確保瞬時錯誤不會永久中斷複製設定。另請參見 wal_retrieve_retry_interval
。
如果您在文件中發現任何不正確、與您對特定功能的實際體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。