本节介绍每个逻辑复制消息的详细格式。 这些消息由复制插槽SQL接口返回或由walsender发送。对于walsender, 它们被封装在复制协议WAL消息中,如第 52.4 节中所述, 并且通常遵循与物理复制相同的消息流。
将消息标识为开始消息。
事务的结束LSN。
提交事务的时间戳。自PostgreSQL纪元(2000-01-01)以来的数值是微秒数。
事务的Xid。
将消息标识为提交消息。
标志;目前未使用(必须为0)。
提交的LSN。
事务的结束LSN。
提交事务的时间戳。自PostgreSQL纪元(2000-01-01)以来的数值是微秒数。
将消息标识为原始消息。
源服务器上提交的LSN。
起始的名称。
请注意,单个事务内可能有多个Origin消息。
将消息标识为关系消息。
关系的ID。
命名空间(pg_catalog
的空字符串)。
关系名称。
该关系的副本标识设置(与pg_class
中的relreplident
相同)。
列数。
接下来,每列显示以下消息部分:
列的标志。当前可以是0表示没有标记或1表示将列标记为关键字的一部分。
列的名称。
列的数据类型的ID。
列的类型修饰符(atttypmod
).
将消息标识为类型消息。
数据类型的ID。
命名空间(pg_catalog
的空字符串)。
数据类型的名称。
将消息标识为插入消息。
与关系消息中的ID对应的关系的ID。
将以下TupleData消息标识为新元组。
TupleData消息部分表示新元组的内容。
将消息标识为更新消息。
与关系消息中的ID对应的关系的ID。
将以下TupleData子消息标识为键。该字段是可选的, 并且只有在更新改变了REPLICA IDENTITY索引一部分的任何一列中的数据时才存在。
将以下TupleData子消息标识为旧元组。此字段是可选的, 并且仅当发生更新的表的REPLICA IDENTITY设置为FULL时才存在。
TupleData消息部分表示旧元组或主键的内容。 只有在前面的'O'或'K'部分存在时才存在。
将以下TupleData消息标识为新元组。
TupleData消息部分表示新元组的内容。
更新消息可以包含'K'消息部分或者'O'消息部分或者都不包含它们,但不同时包括它们两者。
将消息标识为删除消息。
与关系消息中的ID对应的关系的ID。
将以下TupleData子消息标识为键。 如果发生删除的表使用索引作为REPLICA IDENTITY,则此字段存在。
将以下TupleData消息标识为旧元组。 如果发生删除的表的REPLICA IDENTITY设置为FULL,则此字段存在。
TupleData消息部分,表示旧元组或主键的内容,具体取决于前一个字段。
删除消息可能包含'K'消息部分或'O'消息部分,但不会同时包含这两个部分。
以下消息部分由上述消息共享。
列数。
接下来,为每列显示以下子消息之一:
将数据标识为NULL值。
或者
识别未更改的TOASTed值(实际值未发送)。
或者
将数据标识为文本格式的值。
列值的长度。
n
该列的值,以文本格式显示。(未来版本可能支持其他格式。)
n
是上面的长度。