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

咨询Logical replication行为:源更新column1却覆盖目标column2是否正常

PostgreSQL逻辑复制:源端单字段更新覆盖目标端自定义字段的行为解析

这属于逻辑复制的正常默认行为,核心原因和它的同步机制直接相关:

  • 默认采用全行复制模式:源端执行UPDATE操作时,哪怕只修改了单个字段,默认的publication会将整行数据同步到目标端。目标端接收到数据后,会用源端的整行覆盖主键/唯一键匹配的本地行——不管目标端该字段之前有没有被手动修改过。
  • 这种设计的初衷是确保源端作为数据权威,两端数据严格一致,默认不允许目标端的本地修改脱离源端的同步规则。

如果要避免目标端自定义字段被覆盖,可以通过两种方式调整:

  1. 配置部分字段复制
    创建publication时仅指定需要同步的字段,这样源端更新指定字段时,目标端只会同步该字段,其他字段不受影响。示例SQL:

    CREATE PUBLICATION pub_t1 FOR TABLE t1 (column1);
    
  2. 设置冲突解决策略
    在订阅端配置冲突处理规则,比如保留目标端的修改。PostgreSQL 10+支持在创建订阅时指定ON_CONFLICT子句,示例:

    CREATE SUBSCRIPTION sub_t1
    CONNECTION 'dbname=target_db host=source_host'
    PUBLICATION pub_t1
    WITH (ON_CONFLICT_DO_NOTHING); -- 或根据业务需求使用ON_CONFLICT_DO_UPDATE并指定同步字段
    

内容的提问来源于stack exchange,提问作者satya k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:04