Postgresql 中文操作指南
55.9. Logical Replication Message Formats #
本部分对每条逻辑复制消息的详细格式进行了说明。这些消息由复制槽 SQL 接口返回,或由 walsender 发送。若是 walsender,它们会封装在如同 Section 55.4中所述的复制协议 WAL 消息中,并且一般遵循与物理复制相同的消息流程。
-
Begin #
-
Message #
-
Commit #
-
Origin #
-
请注意,单个事务中可能包含多个源消息。
-
-
Relation #
-
接下来,对于包含在发布中的每一列(生成的列除外),将显示以下消息部分:
-
-
Type #
-
Insert #
-
Update #
-
Update 消息可能包含“K”消息部分或“O”消息部分,但不能同时包含。
-
-
Delete #
-
Delete 消息可能包含“K”消息部分或“O”消息部分,但不能同时包含。
-
-
Truncate #
-
Byte1('B')
-
标识消息为开始消息。
-
-
Int64 (XLogRecPtr)
-
事务的最终 LSN。
-
-
Int64 (TimestampTz)
-
事务的提交时间戳。该值是以微秒为单位,自 PostgreSQL 历元(2000-01-01)以来经过的时间。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
Byte1('M')
-
标识消息为逻辑解码消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int8
-
标志;无标志为 0,如果逻辑解码消息是事务性的,则为 1。
-
-
Int64 (XLogRecPtr)
-
逻辑解码消息的 LSN。
-
-
String
-
逻辑解码消息的前缀。
-
-
Int32
-
Length of the content.
-
-
Byte_n_
-
逻辑解码消息的内容。
-
-
Byte1('C')
-
标识消息为提交消息。
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
提交的 LSN。
-
-
Int64 (XLogRecPtr)
-
事务的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的提交时间戳。该值是以微秒为单位,自 PostgreSQL 历元(2000-01-01)以来经过的时间。
-
-
Byte1('O')
-
将消息标识为源消息。
-
-
Int64 (XLogRecPtr)
-
源服务器上提交的 LSN。
-
-
String
-
Name of the origin.
-
-
Byte1('R')
-
将消息标识为关联消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int32 (Oid)
-
OID of the relation.
-
-
String
-
命名空间(对于 pg_catalog 来说为空字符串)。
-
-
String
-
Relation name.
-
-
Int8
-
关联的副本标识设置(与 pg_class 中的 relreplident 相同)。
-
-
Int16
-
Number of columns.
-
-
Int8
-
列的标志。当前可以是 0(表示没有标志)或 1(表示将列标记为键的一部分)。
-
-
String
-
Name of the column.
-
-
Int32 (Oid)
-
列的数据类型的 OID。
-
-
Int32
-
列的类型修饰符 (atttypmod)。
-
-
Byte1('Y')
-
将消息标识为类型消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int32 (Oid)
-
数据类型的 OID。
-
-
String
-
命名空间(对于 pg_catalog 来说为空字符串)。
-
-
String
-
数据类型的名称。
-
-
Byte1('I')
-
将消息标识为插入消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int32 (Oid)
-
关系中与关系消息中的 ID 相对应的 OID
-
-
Byte1('N')
-
表示以下 TupleData 消息为新元组。
-
-
TupleData
-
代表新元组内容的 TupleData 消息部分。
-
-
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 消息部分。
-
-
Byte1('D')
-
表示消息为删除消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int32 (Oid)
-
关系中与关系消息中的 ID 相对应的 OID
-
-
Byte1('K')
-
表示以下 TupleData 子消息为键。如果发生删除的表的索引用作 REPLICA IDENTITY,则此字段会存在。
-
-
Byte1('O')
-
表示以下 TupleData 消息为旧元组。如果发生删除的表的 REPLICA IDENTITY 设置为 FULL,则此字段会存在。
-
-
TupleData
-
根据前一个字段,代表旧元组或主键内容的 TupleData 消息部分。
-
-
Byte1('T')
-
表示消息为裁剪消息。
-
-
Int32 (TransactionId)
-
事务的 Xid(仅出现在流式事务中)。此字段自协议版本 2 以来可用。
-
-
Int32
-
Number of relations
-
-
Int8
-
TRUNCATE 的选项位:1 表示 CASCADE,2 表示 RESTART IDENTITY
-
-
Int32 (Oid)
-
关系中与关系消息中的 ID 相对应的 OID。此字段为每个关系重复一次。
-
以下消息(Stream Start、Stream Stop、Stream Commit 和 Stream Abort)从协议版本 2 开始可用。
-
Stream Start #
-
Stream Stop #
-
Stream Commit #
-
Stream Abort #
-
Byte1('S')
-
将消息识别为流开始消息。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
Int8
-
值为 1 表示这是此 XID 的第一个流段,值为 0 表示其他任何流段。
-
-
Byte1('E')
-
将消息识别为流停止消息。
-
-
Byte1('c')
-
将消息识别为流提交消息。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
提交的 LSN。
-
-
Int64 (XLogRecPtr)
-
事务的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的提交时间戳。该值是以微秒为单位,自 PostgreSQL 历元(2000-01-01)以来经过的时间。
-
-
Byte1('A')
-
将消息识别为流中止消息。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
Int32 (TransactionId)
-
子事务的 Xid(对于顶级事务,将与事务的 XID 相同)。
-
-
Int64 (XLogRecPtr)
-
中止的 LSN。此字段自协议版本 4 起可用。
-
-
Int64 (TimestampTz)
-
事务的中止时间戳。该值是自 PostgreSQL 纪元(2000-01-01)以来的微秒数。此字段自协议版本 4 起可用。
-
以下消息(开始准备、准备、提交已准备、回滚已准备、流准备)自协议版本 3 起可用。
-
Begin Prepare #
-
Prepare #
-
Commit Prepared #
-
Rollback Prepared #
-
Stream Prepare #
-
Byte1('b')
-
将消息识别为已准备事务消息的开始。
-
-
Int64 (XLogRecPtr)
-
准备的 LSN。
-
-
Int64 (XLogRecPtr)
-
准备事务的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的准备时间戳。该值是自 PostgreSQL 纪元(2000-01-01)以来的微秒数。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
String
-
已准备事务的用户定义的 GID。
-
-
Byte1('P')
-
将消息识别为已准备事务消息。
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
准备的 LSN。
-
-
Int64 (XLogRecPtr)
-
准备事务的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的准备时间戳。该值是自 PostgreSQL 纪元(2000-01-01)以来的微秒数。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
String
-
已准备事务的用户定义的 GID。
-
-
Byte1('K')
-
将消息识别为已准备事务消息的提交。
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
已准备事务提交的 LSN。
-
-
Int64 (XLogRecPtr)
-
已准备事务提交的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的提交时间戳。该值是以微秒为单位,自 PostgreSQL 历元(2000-01-01)以来经过的时间。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
String
-
已准备事务的用户定义的 GID。
-
-
Byte1('r')
-
将消息识别为已准备事务消息的回滚。
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
准备事务的结束 LSN。
-
-
Int64 (XLogRecPtr)
-
已准备事务回滚的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的准备时间戳。该值是自 PostgreSQL 纪元(2000-01-01)以来的微秒数。
-
-
Int64 (TimestampTz)
-
事务的回滚时间戳。此值为自 PostgreSQL 纪元(2000-01-01)起以微秒为单位的数字。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
String
-
已准备事务的用户定义的 GID。
-
-
Byte1('p')
-
将消息识别为流准备的事务消息。
-
-
Int8(0)
-
Flags; currently unused.
-
-
Int64 (XLogRecPtr)
-
准备的 LSN。
-
-
Int64 (XLogRecPtr)
-
准备事务的结束 LSN。
-
-
Int64 (TimestampTz)
-
事务的准备时间戳。该值是自 PostgreSQL 纪元(2000-01-01)以来的微秒数。
-
-
Int32 (TransactionId)
-
Xid of the transaction.
-
-
String
-
已准备事务的用户定义的 GID。
-
以上消息的部分由上述消息共享。
-
TupleData #
-
接下来,将针对每列(生成的列除外)显示以下子消息之一:
-
Or
-
Or
-
Or
-
-
Int16
-
Number of columns.
-
-
Byte1('n')
-
将数据标识为 NULL 值。
-
-
Byte1('u')
-
将未更改的 TOASTed 值标记为(实际值未发送)。
-
-
Byte1('t')
-
将数据标识为文本格式值。
-
-
Byte1('b')
-
将数据标识为二进制格式值。
-
-
Int32
-
列值长度。
-
-
Byte_n_
-
列值,可以是二进制格式或文本格式。(如在前面的格式字节中指定)。 n 是上述长度。
-