You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定影响指定表的最后一个LSN?(逻辑复制场景)

PostgreSQL逻辑复制:发布LSN跟踪与表映射技巧

一、每个发布的LSN跟踪方式

  • PostgreSQL会通过复制槽间接跟踪发布的LSN进度。你可以查询pg_replication_slots系统视图:
    • 其中confirmed_flush_lsn字段代表订阅端已确认接收的LSN位置;
    • PostgreSQL 13及以上版本中,publication_names字段直接关联了复制槽对应的发布,这样就能把槽的LSN和发布绑定起来。
  • 另外pg_stat_replication视图里的flush_lsn能反映当前复制连接的LSN位置,但这是针对整个连接的,不是单发布的。如果你的订阅只关联一个发布,这个值也能代表该发布的进度。

二、LSN映射回对应表的技巧

  • 用pg_waldump解析WAL:执行pg_waldump --format=json <WAL文件名>,输出的JSON里会有relation字段(表的OID),再通过pg_class表转换为表名:
    SELECT relname FROM pg_class WHERE oid = '表OID';
    
    每条变更还会附带对应的LSN,以此完成关联。
  • 逻辑解码插件关联:用test_decoding这类插件创建复制槽,然后调用pg_logical_slot_get_changes函数获取变更,结果里会直接给出relation(表名或OID)和对应的LSN,示例:
    SELECT lsn, relation, data FROM pg_logical_slot_get_changes('your_slot_name', NULL, NULL);
    
  • 自定义触发器记录(可选):如果需要实时记录每个表的变更LSN,可以给目标表添加触发器,在变更时把当前LSN(pg_current_wal_lsn())和表信息写入日志表。但这种方法会增加性能开销,按需使用。

三、其他可用统计信息

  • 订阅端可以查询pg_stat_subscription,里面包含接收的变更数、最后同步的LSN、同步延迟等数据;
  • 发布端除了你已经在用的pg_publication_tables,pg_publication视图能查看发布的配置信息,结合复制槽的LSN数据就能拼凑出发布的进度情况。

内容的提问来源于stack exchange,提问作者Dima Tisnek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:13:13