问题标签 [logical-replication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 流复制协议中的适当备用状态更新
问题是关于流复制协议。这非常简单,是为物理复制而设计的,能够:
- 发送服务器状态 >
Primary keepalive message
- 接收副本状态 >
Standby status update
- 发送 WAL 数据 >
XLogData
还有逻辑解码,使用相同的 XLogData 帧通过插件发送从 WAL 解码的数据,pglogical
而不是原始 WAL。
Streaming Replication 希望我提交 Standby 状态更新,以释放资源并删除旧的 WAL,根据文档
最后一个 WAL 字节的位置 + 1 ...
pglogical
在 XLogData 帧中使用自己的消息返回自己的 LSN 位置,但这些不可用。
当数据写入不同的数据库时,逻辑解码不起作用。并且插槽位置还需要更新,否则插槽将丢失。因此,唯一的方法是从 发送 LSN 位置Primary keepalive message
,根据文档发送
服务器上 WAL 的当前结束。
这令人困惑。如果插槽在位置 100 并且服务器已经在位置 200 上怎么办?
所以,
在试验和检查 pg_recvlogical 的来源之后,明白了,这Primary keepalive message
并不意味着“服务器上 WAL 的当前结束”,而是实际上从插槽位置逐渐增加到当前(pg_current_wal_lsn()
)服务器 LSN。中间有 XLogData 帧(如果有的话)。似乎,类似的消息是按 LSN 顺序接收的。
现在,问题:
Q1) 它是否记录在某处?
Q2) 这有意义吗?我是不是误会了什么?
Q3) 流式消息总是按 LSN 排序吗?
Q4) 可以提交职位Primary keepalive message
吗?