本节描述了每个逻辑复制消息的详细格式。这些消息由复制槽 SQL 接口返回,或由 walsender 发送。对于 walsender,它们被封装在复制协议 WAL 消息中,如第 54.4 节所述,并且通常遵循与物理复制相同的消息流。
标识消息为 begin 消息。
事务的最终 LSN。
事务的提交时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
标识消息为逻辑解码消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
标志;0 表示无标志,1 表示逻辑解码消息是事务性的。
逻辑解码消息的 LSN。
逻辑解码消息的 prefix。
content 的长度。
n
逻辑解码消息的 content。
标识消息为 commit 消息。
标志;目前未使用。
commit 的 LSN。
事务的结束 LSN。
事务的提交时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
标识消息为 origin 消息。
源服务器上 commit 的 LSN。
源的名称。
请注意,一个事务中可能包含多个 Origin 消息。
标识消息为 relation 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
relation 的 OID。
Namespace (对于 pg_catalog
为空字符串)。
Relation 的名称。
relation 的 replica identity 设置 (与 pg_class
中的 relreplident
相同)。
列的数量。
接下来,对于发布中包含的每一列,将出现以下消息部分。
列的标志。目前可以是 0 (无标志) 或 1 (标记该列是 key 的一部分)。
列的名称。
列数据类型的 OID。
列的类型修饰符 (atttypmod
)。
标识消息为 type 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
数据类型的 OID。
Namespace (对于 pg_catalog
为空字符串)。
数据类型的名称。
标识消息为 insert 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
relation 的 OID,对应 relation 消息中的 ID。
标识下面的 TupleData 消息为新元组。
代表新元组内容的 TupleData 消息部分。
标识消息为 update 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
relation 的 OID,对应 relation 消息中的 ID。
标识下面的 TupleData 子消息为 key。此字段是可选的,仅当 update 更改了 REPLICA IDENTITY 索引所包含的列中的任何数据时存在。
标识下面的 TupleData 子消息为旧元组。此字段是可选的,仅当发生 update 的表将 REPLICA IDENTITY 设置为 FULL 时存在。
代表旧元组或主键内容的 TupleData 消息部分。仅当存在前面的 'O' 或 'K' 部分时存在。
标识下面的 TupleData 消息为新元组。
代表新元组内容的 TupleData 消息部分。
Update 消息可能包含 'K' 消息部分或 'O' 消息部分,或者两者都不包含,但绝不会同时包含两者。
标识消息为 delete 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
relation 的 OID,对应 relation 消息中的 ID。
标识下面的 TupleData 子消息为 key。当发生 delete 的表使用索引作为 REPLICA IDENTITY 时,此字段存在。
标识下面的 TupleData 消息为旧元组。当发生 delete 的表将 REPLICA IDENTITY 设置为 FULL 时,此字段存在。
根据前面的字段,表示旧元组或主键内容的 TupleData 消息部分。
Delete 消息可能包含 'K' 消息部分或 'O' 消息部分,但绝不会同时包含两者。
标识消息为 truncate 消息。
事务的 Xid (仅当是流式事务时存在)。此字段自协议版本 2 起可用。
relation 的数量。
TRUNCATE
的选项位:1 表示 CASCADE
,2 表示 RESTART IDENTITY
。
relation 的 OID,对应 relation 消息中的 ID。此字段对每个 relation 重复。
以下消息 (Stream Start, Stream Stop, Stream Commit, Stream Abort) 自协议版本 2 起可用。
标识消息为 stream start 消息。
事务的 Xid。
值为 1 表示这是此 XID 的第一个 stream 片段,0 表示其他 stream 片段。
标识消息为 stream stop 消息。
标识消息为 stream commit 消息。
事务的 Xid。
标志;目前未使用。
commit 的 LSN。
事务的结束 LSN。
事务的提交时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
标识消息为 stream abort 消息。
事务的 Xid。
子事务的 Xid (对于顶级事务,将与事务的 xid 相同)。
abort 操作的 LSN,仅当 streaming 设置为 parallel 时存在。此字段自协议版本 4 起可用。
事务的 abort 时间戳,仅当 streaming 设置为 parallel 时存在。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。此字段自协议版本 4 起可用。
以下消息 (Begin Prepare, Prepare, Commit Prepared, Rollback Prepared, Stream Prepare) 自协议版本 3 起可用。
标识消息为 prepared transaction 消息的开始。
prepare 的 LSN。
prepared transaction 的结束 LSN。
事务的 prepare 时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
事务的用户定义 GID。
标识消息为 prepared transaction 消息。
标志;目前未使用。
prepare 的 LSN。
prepared transaction 的结束 LSN。
事务的 prepare 时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
事务的用户定义 GID。
标识消息为 prepared transaction commit 消息。
标志;目前未使用。
prepared transaction commit 的 LSN。
prepared transaction commit 的结束 LSN。
事务的提交时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
事务的用户定义 GID。
标识消息为 prepared transaction rollback 消息。
标志;目前未使用。
prepared transaction 的结束 LSN。
prepared transaction rollback 的结束 LSN。
事务的 prepare 时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 rollback 时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
事务的用户定义 GID。
标识消息为 stream prepared transaction 消息。
标志;目前未使用。
prepare 的 LSN。
prepared transaction 的结束 LSN。
事务的 prepare 时间戳。该值是以自 PostgreSQL 纪元 (2000-01-01) 以来的微秒数表示。
事务的 Xid。
事务的用户定义 GID。
上述消息共享以下消息部分。
列的数量。
接下来,对于每个发布的列,将出现以下子消息之一。
标识数据为 NULL 值。
或者
标识未更改的 TOASTed 值 (实际值未发送)。
或者
标识数据为文本格式的值。
或者
标识数据为二进制格式的值。
列值的长度。
n
列的值,可以是二进制格式或文本格式 (如前面格式字节指定)。n
是上述长度。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。