Skip to main content
关于 Postgres 复制工作机制的许多问题——包括 TOAST 列、replication slot、publication、schema 变更和数据类型映射——都可在 ClickPipes for Postgres FAQ 中找到解答。其中的信息同样适用于 ClickHouse Managed Postgres 迁移。

复制期间出现“枚举 输入值无效”错误

当源 Postgres 中存在目标 ClickHouse Managed Postgres 上没有的 枚举 值时,就会出现此错误。逻辑复制不会自动传播 ALTER TYPE ... ADD VALUE 命令,因此,如果在初始 schema 设置完成后,源端新增了 枚举 值,就会导致目标端插入失败。 要解决此问题,请在目标 Postgres 上为该 枚举 类型补上缺失的值:
your_enum_type 替换为你的枚举类型名称,并将 'new_value' 替换为错误消息中缺少的值。

复制期间出现唯一约束或检查约束冲突错误

当复制顺序与目标端现有约束冲突时,逻辑复制过程中可能发生约束冲突。
  • 唯一约束:我们以批次 MERGE/UPSERT 操作应用更改,为每个主键写入最新值。因此,特定键的操作顺序可能与唯一索引预期的顺序不一致。即使 MERGE 完成后约束能够满足,事务过程中也可能暂时违反 UNIQUE 约束。Postgres 无法像延迟外键检查那样延迟唯一索引检查,因此无法将检查推迟到事务结束时。这不会影响数据一致性:行身份由主键定义,MERGE 逻辑也基于同一主键。
  • 检查约束:目标端的检查约束可能比源端更严格,或者批次 MERGE 期间的中间状态可能不满足该约束,即使最终状态满足。与唯一约束一样,这不会影响数据一致性,因为 MERGE 基于定义行身份的主键。
要解除复制阻塞,请删除目标 Postgres 上导致冲突的约束:
您可以根据错误消息中的名称查找约束的详细信息:
复制完成且源端不再处于活动状态后,在切换期间重新添加约束:
最后修改于 2026年8月14日