9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面
53.9. 逻辑复制消息格式
上一页 上一级 第 53 章 前端/后端协议起始页 下一页

53.9. 逻辑复制消息格式

这一节介绍每一种逻辑复制消息的详细格式。这些消息会通过复制槽的SQL接口返回或者由walsender发送。在由walsender发送的情况下,它们被封装在第 53.4 节中所述的复制协议WAL消息中,并且通常服从和物理复制相同的消息流。

Begin
Byte1('B')

标识该消息是一个开始消息。

Int64

该事务的最终LSN。

Int64

该事务的提交时间戳。该值是自PostgreSQL纪元(2000年01月01日)以来的微秒数。

Int32

事务的XID。

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

关系名。

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消息是一个新元组。

TupleData

TupleData消息部分表示新元组的内容。

Update
Byte1('U')

标识该消息是一个更新消息。

Int32

对应于关系消息中的ID的关系的ID。

Byte1('K')

标识接下来的TupleData子消息为一个键。这个字段是可选的并且仅当任意列中被更新更改的数据是REPLICA IDENTITY索引的一部分时才存在。

Byte1('O')

标识接下来的TupleData子消息为一个旧元组。这个字段是可选的并且仅当发生更新的表的REPLICA IDENTITY被设置为FULL时才存在。

TupleData

TupleData消息部分表示旧元组或主键的内容。仅当之前的'0'或'K'部分存在时才存在。

Byte1('N')

标识接下来的TupleData消息是一个新元组。

TupleData

TupleData消息部分表示一个新元组的内容。

Update消息可能包含一个'K'消息部分或者一个'O'消息部分,或者两者都不包含,但是绝不会同时包含两者。

Delete
Byte1('D')

标识该消息是一个删除消息。

Int32

对应于关系消息中的ID的关系的ID。

Byte1('K')

标识接下来的TupleData子消息是一个键。如果发生删除的表正好用一个索引作为REPLICA IDENTITY,那么就会存在这个字段。

Byte1('O')

标识接下来的TupleData子消息为一个旧元组。这个字段是可选的并且仅当发生删除的表的REPLICA IDENTITY被设置为FULL时才存在。

TupleData

TupleData消息部分表示旧元组或主键的内容,取决于前面的字段。

Delete消息可能包含一个'K'消息部分或者一个'O'消息部分,或者两者都不包含,但是绝不会同时包含两者。

Truncate
Byte1('T')

标识该消息是一个截断消息。

Int32

关系的数目。

Int8

TRUNCATE的选项位:1表示CASCADE,2表示RESTART IDENTITY

Int32

对应于关系消息中的ID的关系的ID。这个字段会为每个关系重复出现。

下面的消息部分由上面的消息共享。

TupleData
Int16

列数。

接下来,为每一列会有下列子消息之一出现:

Byte1('n')

标识该数据为NULL值。

或者

Byte1('u')

标识未更改的被TOAST过的值(实际值没有被发送)。

或者

Byte1('t')

标识数据为文本格式化的值。

Int32

列值的长度。

Byten

该列的值的文本格式(未来的发行可能会支持额外的格式)。n是上面的长度。


上一页 上一级 下一页
53.8. 错误和通知消息域 起始页 53.10. 自协议2.0以来的变化总结

AltStyle によって変換されたページ (->オリジナル) /