我正在尝试仅在一张表上的两台服务器之间运行 PostgreSQL (10.6) 逻辑复制。该表具有 Id(int2) 作为主键。这是有意的,该表充当一些 IoT 时间序列数据的滚动窗口。在主节点上写入很重。整个表有大约 10 分钟的传感器数据。这就是我们喜欢保留的设计。
Master 和 Replica 节点之间的逻辑复制运行良好,直到网络中断持续超过 1 小时。同时,主节点上的 PostgreSQL 正在收集 WAL 文件,并在表上逐步插入/更新。如此有效地,WAL 文件可能包含我们不感兴趣的甚至数小时的数据,并且当连接恢复时,它们需要永远从 Master -> Replica 逐步重播。它基本上是重放数据库表中长时间不存在的记录!
如何设置它以便仅重播相关数据?如果这很难做到,有没有办法丢弃早于 10 分钟的 WAL 文件,这样它们就不会被发送?
我尝试过使用 postgresql.conf 设置。我不确定是否有一个标志可以限制在复制槽断开连接的情况下存储的 WAL 文件。
这是表格的样子:
CREATE TABLE iot_ts (id int2 not null, time timestamp(0) not null, value real, primary key(id));
我想设置此类表的逻辑复制,以便在发生长时间的互联网中断时恢复速度很快并且仅包含最新数据。