pg_subscription_rel中srsubstate列r与s状态的语义差异
PostgreSQL pg_subscription_rel中srsubstate列'r'与's'的语义区别
核心含义与差异
's'(已同步):
这个状态说明订阅对应的表已经完成了初始全量数据同步——订阅端已经把发布端该表在订阅创建时的所有数据都拉取并写入完毕。此时订阅端的数据和发布端在同步启动时刻的状态完全一致,之后只会接收并应用发布端后续产生的增量变更(比如新增、修改、删除操作)。'r'(就绪):
这个状态表示订阅关系已经准备好接收并应用发布端的增量变更,但没完成初始全量数据同步。常见场景有两种:一是创建订阅时手动指定了WITH (copy_data = false),直接跳过了初始数据复制;二是初始同步过程中被中断或失败,之后订阅恢复到能接收增量的状态,但全量数据还没同步完。
关键区别总结
- 初始同步完成情况:'s'一定完成了初始全量同步,'r'则完全没做或者没做完初始同步
- 数据一致性基础:'s'状态下订阅端有发布端初始时刻的完整数据,后续只追增量;'r'状态下订阅端可能只有部分数据,甚至完全没有初始数据,只能从订阅生效后的增量开始接收
- 触发场景:'s'是初始同步成功后的稳定状态;'r'要么是主动跳过初始同步的结果,要么是初始同步失败/中断后的就绪状态
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian
相关产品推荐
相关产品推荐

