PostgreSQL 15.2逻辑复制冲突:如何让发布端数据覆盖订阅端
PostgreSQL逻辑复制冲突:发布端强制覆盖订阅端冲突行解决方案
针对你遇到的主键冲突导致同步失败的问题,PostgreSQL 15.2支持通过配置订阅的冲突解决策略,实现发布端数据强制覆盖订阅端冲突行,具体方案如下:
1. 修改已存在的订阅(适用于已完成逻辑复制配置的场景)
直接修改现有订阅的冲突处理规则,指定冲突时用发布端数据更新订阅端:
ALTER SUBSCRIPTION your_subscription_name SET (conflict_resolution = 'update');
执行后需重启订阅的应用进程生效:
ALTER SUBSCRIPTION your_subscription_name REFRESH PUBLICATION;
2. 创建订阅时指定冲突策略(适用于新建订阅场景)
如果是首次配置订阅,可在创建时直接设置冲突解决规则:
CREATE SUBSCRIPTION your_subscription_name CONNECTION 'host=xxx port=xxx dbname=xxx user=xxx password=xxx' PUBLICATION your_publication_name WITH (conflict_resolution = 'update');
关键说明
- 冲突解决依赖表的唯一约束或主键:你的表
t1已定义PRIMARY KEY(a),满足冲突检测的前提条件。 conflict_resolution = 'update'会用发布端的全量字段值覆盖订阅端冲突行的对应字段;若需自定义更新字段,可配合column_list参数(需确保发布包含对应字段)。- 修改完成后,再次测试发布端插入主键为4的数据,订阅端的
(4, 'bbb')会被自动更新为(4, 'four')。
内容的提问来源于stack exchange,提问作者Алексей Галабут
相关产品推荐
相关产品推荐

