本節描述邏輯複製協定,這是由 START_REPLICATION
SLOT
slot_name
LOGICAL
複製命令啟動的訊息流程。
邏輯串流複製協定建立在實體串流複製協定的基礎之上。
PostgreSQL 邏輯解碼支援輸出外掛程式。pgoutput
是用於內建邏輯複製的標準外掛程式。
使用 START_REPLICATION
命令時,pgoutput
接受以下選項
協定版本。目前支援 1
、2
、3
和 4
版本。需要有效的版本。
版本 2
僅適用於伺服器版本 14 及以上,它允許串流大型進行中交易。
版本 3
僅適用於伺服器版本 15 及以上,它允許串流兩階段提交。
版本 4
僅適用於伺服器版本 16 及以上,它允許以平行方式應用大型進行中交易的串流。
以逗號分隔的發布名稱清單,用於訂閱(接收變更)。個別發布名稱被視為標準物件名稱,並且可以根據需要以相同的方式引用。至少需要一個發布名稱。
使用二進位傳輸模式的布林選項。二進位模式比文字模式更快,但稍微不太穩固。
啟用傳送由 pg_logical_emit_message
寫入的訊息的布林選項。
啟用串流進行中交易的布林選項。它接受額外的值 "parallel",以啟用傳送一些額外資訊,以用於平行化。需要最小協定版本 2 才能開啟它。 "parallel" 選項需要最小協定版本 4。
啟用兩階段交易的布林選項。需要最小協定版本 3 才能開啟它。
選項可以根據變更的來源傳送變更。可能的值為 "none",僅傳送沒有相關來源的變更,或 "any",傳送變更而不管其來源。這可用於避免複製節點之間的迴圈(相同資料的無限複製)。
個別協定訊息將在以下小節中討論。個別訊息在 第 53.9 節 中描述。
所有頂層協定訊息都以訊息類型位元組開頭。雖然在程式碼中表示為字元,但這是一個沒有關聯編碼的帶正負號的位元組。
由於串流複製協定提供訊息長度,因此頂層協定訊息不需要在其標頭中嵌入長度。
除了 START_REPLICATION
命令和重播進度訊息之外,所有資訊都僅從後端流向前端。
邏輯複製協定一次傳送一個個別交易。這意味著一對 Begin 和 Commit 訊息之間的所有訊息都屬於同一個交易。同樣,一對 Begin Prepare 和 Prepare 訊息之間的所有訊息都屬於同一個交易。它還會在一對 Stream Start 和 Stream Stop 訊息之間傳送大型進行中交易的變更。此類交易的最後一個串流包含 Stream Commit 或 Stream Abort 訊息。
每個傳送的交易都包含零個或多個 DML 訊息(Insert、Update、Delete)。在串聯設定的情況下,它還可以包含 Origin 訊息。來源訊息指示交易源自不同的複製節點。由於邏輯複製協定範圍內的複製節點幾乎可以是任何東西,因此唯一的識別符號是來源名稱。下游有責任根據需要(如果需要)處理此問題。來源訊息始終在交易中的任何 DML 訊息之前傳送。
每個 DML 訊息都包含一個關係 OID,用於識別已執行動作的發布者關係。在給定關係 OID 的第一個 DML 訊息之前,將傳送一個 Relation 訊息,描述該關係的結構描述。隨後,如果關係的定義自上次為其傳送 Relation 訊息以來已變更,則將傳送一個新的 Relation 訊息。(協定假設客戶端能夠記住盡可能多個關係的此中繼資料。)
關聯訊息透過 OID 來識別欄位的資料型別。 若是內建型別,則假設用戶端可以在本機查詢到該型別的 OID,因此不需要額外的資料。 對於非內建型別的 OID,在傳送關聯訊息之前,會先傳送一個型別訊息 (Type message),以提供與該 OID 相關聯的型別名稱。 因此,需要明確識別關聯欄位型別的用戶端,應快取型別訊息的內容,並首先查閱該快取,以查看是否已在其中定義了型別 OID。 如果沒有,則在本機查詢該型別 OID。
如果您在文件中發現任何不正確、與您特定功能的使用經驗不符或需要進一步說明的內容,請使用此表單來回報文件問題。