本節描述邏輯複製協定,此協定是由 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 訊息。origin 訊息表示事務源自不同的複製節點。由於邏輯複製協定範圍內的複製節點幾乎可以是任何東西,因此唯一的識別符是 origin 名稱。下游有責任根據需要(如果需要)處理此問題。 Origin 訊息始終在事務中的任何 DML 訊息之前傳送。
每個 DML 訊息都包含一個關係 OID,用於識別已執行動作的發布者關係。在給定關係 OID 的第一個 DML 訊息之前,將傳送一個 Relation 訊息,描述該關係的架構。隨後,如果關係的定義自上次為其傳送 Relation 訊息以來已發生變更,則將傳送一個新的 Relation 訊息。(該協定假設客戶端能夠記住任意多個關係的此中繼資料。)
Relation 訊息透過其 OID 識別欄位類型。如果是內建類型,則假定客戶端可以在本地查找該類型 OID,因此不需要額外資料。對於非內建類型 OID,將在 Relation 訊息之前傳送一個 Type 訊息,以提供與該 OID 關聯的類型名稱。因此,需要專門識別關係欄位類型的客戶端應快取 Type 訊息的內容,並首先查詢該快取以查看是否已在那裡定義類型 OID。如果沒有,請在本地查找類型 OID。
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用 此表單 報告文件問題。