PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

29.7. 冲突处理 #

29.7.1. 插入冲突(目标行已存在)
29.7.2. 更新冲突(目标行不存在)
29.7.3. 更新冲突(主键冲突)
29.7.4. 更新冲突(来源节点不一致)
29.7.5. 删除冲突(目标行不存在)
29.7.6. 删除冲突(来源节点不一致)
29.7.7. 多重唯一约束冲突

由于订阅端本身依然是一个功能完备的读写数据库,当订阅端的本地写入与远端复制过来的数据发生唯一键冲突或数据丢失时,复制进程会在后台中断挂起,以防止静默覆盖破坏数据一致性。

遇到复制冲突时的排查与处理手段包括:

29.7.1. 插入冲突(目标行已存在) #

当同步插入的行与订阅端既有行的唯一键冲突时产生。

29.7.2. 更新冲突(目标行不存在) #

当尝试更新订阅端上不存在的行版本时产生。

29.7.3. 更新冲突(主键冲突) #

当更新后的新键值与下游另一条记录冲突时产生。

29.7.4. 更新冲突(来源节点不一致) #

当尝试更新由另一不同来源节点最后修改的行时产生。

29.7.5. 删除冲突(目标行不存在) #

当尝试删除订阅端上已被删除或不存在的行时产生。

29.7.6. 删除冲突(来源节点不一致) #

当尝试删除由另一来源节点最后修改的行时产生。

29.7.7. 多重唯一约束冲突 #

当单条写入同时破坏了下游的多项唯一索引时产生。