支援的版本:目前版本 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10

53.9. 邏輯複製訊息格式 #

本節描述了每個邏輯複製訊息的詳細格式。這些訊息可以由複製槽 SQL 介面返回,也可以由 walsender 發送。對於 walsender,它們被封裝在複製協定 WAL 訊息中,如第 53.4 節中所述,並且通常遵循與實體複製相同的訊息流。

Begin(開始) #
Byte1('B')

將訊息識別為開始訊息。

Int64 (XLogRecPtr)

交易的最終 LSN。

Int64 (TimestampTz)

交易的 Commit 時間戳記。該值是自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

Message(訊息) #
Byte1('M')

將訊息識別為邏輯解碼訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int8

旗標;0 表示沒有旗標,1 表示邏輯解碼訊息是事務性的。

Int64 (XLogRecPtr)

邏輯解碼訊息的 LSN。

字串

邏輯解碼訊息的前置詞。

Int32

內容的長度。

Byten

邏輯解碼訊息的內容。

Commit(提交) #
Byte1('C')

將訊息識別為 Commit 訊息。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

Commit 的 LSN。

Int64 (XLogRecPtr)

交易的結束 LSN。

Int64 (TimestampTz)

交易的 Commit 時間戳記。該值是自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Origin(來源) #
Byte1('O')

將訊息識別為來源訊息。

Int64 (XLogRecPtr)

來源伺服器上 Commit 的 LSN。

字串

來源的名稱。

請注意,單個交易中可能存在多個 Origin 訊息。

Relation(關聯) #
Byte1('R')

將訊息識別為關聯訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32 (Oid)

關聯的 OID。

字串

命名空間(pg_catalog 的空字串)。

字串

關聯名稱。

Int8

關聯的副本識別設定(與 relreplidentpg_class 中相同)。

Int16

欄位的數量。

接下來,對於發布中包含的每個欄位(除了產生的欄位)都會顯示以下訊息部分

Int8

欄位的旗標。目前可以是 0 表示沒有旗標,或 1 表示該欄位是索引鍵的一部分。

字串

欄位的名稱。

Int32 (Oid)

欄位資料類型的 OID。

Int32

欄位的類型修飾符 (atttypmod)。

Type(類型) #
Byte1('Y')

將訊息識別為類型訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32 (Oid)

資料類型的 OID。

字串

命名空間(pg_catalog 的空字串)。

字串

資料類型的名稱。

Insert(插入) #
Byte1('I')

將訊息識別為插入訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32 (Oid)

與關聯訊息中的 ID 對應的關聯的 OID。

Byte1('N')

將以下 TupleData 訊息識別為新元組。

TupleData

表示新元組內容的 TupleData 訊息部分。

Update(更新) #
Byte1('U')

將訊息識別為更新訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32 (Oid)

與關聯訊息中的 ID 對應的關聯的 OID。

Byte1('K')

將以下 TupleData 子訊息識別為索引鍵。 此欄位是可選的,僅當更新更改了 REPLICA IDENTITY 索引中任何欄位的資料時才會顯示。

Byte1('O')

將以下 TupleData 子訊息識別為舊元組。 此欄位是可選的,僅當更新發生的表格的 REPLICA IDENTITY 設定為 FULL 時才會顯示。

TupleData

表示舊元組或主鍵內容的 TupleData 訊息部分。 僅當存在先前的 'O' 或 'K' 部分時才會顯示。

Byte1('N')

將以下 TupleData 訊息識別為新元組。

TupleData

表示新元組內容的 TupleData 訊息部分。

更新訊息可能包含 'K' 訊息部分或 'O' 訊息部分,或者兩者都不包含,但永遠不會同時包含兩者。

Delete(刪除) #
Byte1('D')

將訊息識別為刪除訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32 (Oid)

與關聯訊息中的 ID 對應的關聯的 OID。

Byte1('K')

將以下 TupleData 子訊息識別為索引鍵。 如果刪除發生的表格使用索引作為 REPLICA IDENTITY,則此欄位會顯示。

Byte1('O')

將以下 TupleData 訊息識別為舊元組。 如果刪除發生的表格的 REPLICA IDENTITY 設定為 FULL,則此欄位會顯示。

TupleData

TupleData訊息部分,代表舊的 Tuple 或主鍵的內容,取決於前一個欄位。

Delete 訊息可能包含 'K' 訊息部分或 'O' 訊息部分,但永遠不會同時包含兩者。

Truncate (截斷) #
Byte1('T')

識別此訊息為截斷 (truncate) 訊息。

Int32 (TransactionId)

交易的 Xid(僅適用於串流交易)。此欄位自協定版本 2 起可用。

Int32

關聯的數量

Int8

TRUNCATE 的選項位元:1 代表 CASCADE,2 代表 RESTART IDENTITY

Int32 (Oid)

關聯的 OID,對應於關聯訊息中的 ID。此欄位會為每個關聯重複。

以下訊息(Stream Start、Stream Stop、Stream Commit 和 Stream Abort)自協定版本 2 起可用。

Stream Start (串流開始) #
Byte1('S')

識別此訊息為串流開始訊息。

Int32 (TransactionId)

交易的 Xid。

Int8

值為 1 表示這是此 XID 的第一個串流片段,0 表示任何其他串流片段。

Stream Stop (串流停止) #
Byte1('E')

識別此訊息為串流停止訊息。

Stream Commit (串流提交) #
Byte1('c')

識別此訊息為串流提交訊息。

Int32 (TransactionId)

交易的 Xid。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

Commit 的 LSN。

Int64 (XLogRecPtr)

交易的結束 LSN。

Int64 (TimestampTz)

交易的 Commit 時間戳記。該值是自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Stream Abort (串流中止) #
Byte1('A')

識別此訊息為串流中止訊息。

Int32 (TransactionId)

交易的 Xid。

Int32 (TransactionId)

子交易的 Xid (對於頂層交易,將與交易的 xid 相同)。

Int64 (XLogRecPtr)

中止的 LSN。此欄位自協定版本 4 起可用。

Int64 (TimestampTz)

交易的中止時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。此欄位自協定版本 4 起可用。

以下訊息(Begin Prepare、Prepare、Commit Prepared、Rollback Prepared、Stream Prepare)自協定版本 3 起可用。

Begin Prepare (開始準備) #
Byte1('b')

識別此訊息為準備交易訊息的開始。

Int64 (XLogRecPtr)

準備的 LSN。

Int64 (XLogRecPtr)

準備交易的結束 LSN。

Int64 (TimestampTz)

交易的準備時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

字串

準備交易的使用者定義 GID。

Prepare (準備) #
Byte1('P')

識別此訊息為準備交易訊息。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

準備的 LSN。

Int64 (XLogRecPtr)

準備交易的結束 LSN。

Int64 (TimestampTz)

交易的準備時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

字串

準備交易的使用者定義 GID。

Commit Prepared (提交準備) #
Byte1('K')

識別此訊息為準備交易訊息的提交。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

準備交易提交的 LSN。

Int64 (XLogRecPtr)

準備交易提交的結束 LSN。

Int64 (TimestampTz)

交易的 Commit 時間戳記。該值是自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

字串

準備交易的使用者定義 GID。

Rollback Prepared (回滾準備) #
Byte1('r')

識別此訊息為準備交易訊息的回滾。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

準備交易的結束 LSN。

Int64 (XLogRecPtr)

準備交易回滾的結束 LSN。

Int64 (TimestampTz)

交易的準備時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int64 (TimestampTz)

交易的回滾時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

字串

準備交易的使用者定義 GID。

Stream Prepare (串流準備) #
Byte1('p')

識別此訊息為串流準備交易訊息。

Int8(0)

旗標;目前未使用。

Int64 (XLogRecPtr)

準備的 LSN。

Int64 (XLogRecPtr)

準備交易的結束 LSN。

Int64 (TimestampTz)

交易的準備時間戳記。該值為自 PostgreSQL epoch (2000-01-01) 以來的微秒數。

Int32 (TransactionId)

交易的 Xid。

字串

準備交易的使用者定義 GID。

以下訊息部分由上述訊息共享。

TupleData #
Int16

欄位的數量。

接下來,每個欄位 (除了產生的欄位) 都會顯示以下子訊息之一

Byte1('n')

將資料識別為 NULL 值。

或者

Byte1('u')

識別未變更的 TOASTed 值 (實際值不會傳送)。

或者

Byte1('t')

將資料識別為文字格式值。

或者

Byte1('b')

將資料識別為二進位格式值。

Int32

欄位值的長度。

Byten

欄位的值,以二進位或文字格式表示。(如先前的格式位元組中所指定)。 n 是上述長度。

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。