On this page
53.9. 逻辑复制消息格式
本节描述每个逻辑复制消息的详细格式。这些消息由复制插槽 SQL 接口返回或由 walsender 发送。如果是 walsender,则将它们封装在复制协议 WAL 消息中,如Section 53.4中所述,并且通常遵循与物理复制相同的消息流。
- Begin - 
      - Byte1('B') 
- 将消息标识为开始消息。 
 
- Int64 - Transaction 的最终 LSN。
 
- Int64 - 提交事务的时间戳。该值以自 PostgreSQL 时代(2000-01-01)以来的微秒数为单位。
 
- Int32 - Xid 的 Transaction。
 
 
- 
      
- Commit - 
      - Byte1('C') 
- 将消息标识为提交消息。 
 
- Int8 - 标志;当前未使用(必须为 0)。
 
- Int64 - 提交的 LSN。
 
- Int64 - 事务的结束 LSN。
 
- Int64 - 提交事务的时间戳。该值以自 PostgreSQL 时代(2000-01-01)以来的微秒数为单位。
 
 
- 
      
- Origin - 
      - Byte1('O') 
- 将消息标识为原始消息。 
 
- Int64 - 原始服务器上提交的 LSN。
 
- String - 原产地名称。
 
 
- 
      
请注意,单个事务中可以有多个 Origin 消息。
- Relation - 
      - Byte1('R') 
- 将消息标识为关联消息。 
 
- Int32 - 关系的 ID。
 
- String - 命名空间(pg_catalog的空字符串)。
 
- 命名空间(
- String - Relation name.
 
- Int8 - 关系的副本身份设置(与pg_class中的relreplident相同)。
 
- 关系的副本身份设置(与
- Int16 - 列数。
 
 
- 
      
接下来,每列显示以下消息部分:
- Int8 - 列的标志。当前可以为 0(无标志)或 1(将列标记为键的一部分)。 
- String - 列名。
 
- Int32 - 列的数据类型的 ID。
 
- Int32 - 列的修饰符(atttypmod)。
 
- 列的修饰符(
 
- Type - 
      - Byte1('Y') 
- 将消息标识为类型消息。 
 
- Int32 - 数据类型的 ID。
 
- String - 命名空间(pg_catalog的空字符串)。
 
- 命名空间(
- String - 数据类型的名称。
 
 
- 
      
- Insert - 
      - Byte1('I') 
- 将消息标识为插入消息。 
 
- Int32 - 与关联消息中的 ID 对应的关联的 ID。
 
- Byte1('N') - 将以下 TupleData 消息标识为新的 Tuples。
 
- TupleData - TupleData 消息部分,表示新 Tuples 的内容。
 
 
- 
      
- Update - 
      - Byte1('U') 
- 将消息标识为更新消息。 
 
- Int32 - 与关联消息中的 ID 对应的关联的 ID。
 
- Byte1('K') - 将以下 TupleData 子消息标识为键。该字段是可选的,并且仅当更新更改了作为 REPLICA IDENTITY 索引一部分的任何列中的数据时才存在。
 
- Byte1('O') - 将以下 TupleData 子消息标识为旧的 Tuples。该字段是可选的,并且仅当发生更新的表的 REPLICA IDENTITY 设置为 FULL 时才显示。
 
- TupleData - TupleData 消息部分,表示旧 Tuples 或主键的内容。仅当存在先前的“ O”或“ K”部分时才存在。
 
- Byte1('N') - 将以下 TupleData 消息标识为新的 Tuples。
 
- TupleData - TupleData 消息部分,表示新 Tuples 的内容。
 
 
- 
      
更新消息可以包含“ K”消息部分或“ O”消息部分,也可以都不包含,但不能同时包含两者。
- Delete - 
      - Byte1('D') 
- 将消息标识为删除消息。 
 
- Int32 - 与关联消息中的 ID 对应的关联的 ID。
 
- Byte1('K') - 将以下 TupleData 子消息标识为键。如果发生删除的表使用索引作为 REPLICA IDENTITY,则此字段存在。
 
- Byte1('O') - 将以下 TupleData 消息标识为旧 Tuples。如果发生删除的表的 REPLICA IDENTITY 设置为 FULL,则此字段存在。
 
- TupleData - TupleData 消息部分,它表示旧 Tuples 或主键的内容,具体取决于先前的字段。
 
 
- 
      
删除消息可以包含“ K”消息部分或“ O”消息部分,但不能同时包含两者。
- Truncate - 
      - Byte1('T') 
- 将消息标识为截断消息。 
 
- Int32 - 关系数
 
- Int8 - TRUNCATE的选项位:- CASCADE为 1,- RESTART IDENTITY为 2
 
- Int32 - 与关联消息中的 ID 对应的关联的 ID。对于每个关系重复此字段。
 
 
- 
      
以下消息部分由上述消息共享。
- TupleData - 
      - Int16 
- 列数。 
 
 
- 
      
接下来,每列显示以下子消息之一:
- Byte1('n') - 将数据标识为 NULL 值。
 
Or
- Byte1('u') - 标识未更改的 TOASTed 值(不发送实际值)。
 
Or
- Byte1('t') - 将数据标识为文本格式的值。 
- Int32 - 列值的长度。
 
- Byte - n- 列的值,采用文本格式。 (将来的版本可能支持其他格式.)* n*为上述长度。
 
- 列的值,采用文本格式。 (将来的版本可能支持其他格式.)*