Debezium连接器是否存在阻止Postgres间numeric转double precision的参数?
Debezium阻止PostgreSQL numeric转double precision的参数设置
Debezium源端(PostgreSQL连接器)配置
- 设置
decimal.handling.mode=precise:该参数强制Debezium将PostgreSQL的numeric类型以精确格式序列化(内部用Java BigDecimal存储,Kafka消息中以字符串或二进制形式传递),彻底避免转换为double precision带来的精度丢失。 - 配合转换器配置:若使用
JsonConverter作为值转换器,需额外设置decimal.format=string,确保numeric值以字符串形式在Kafka中传输,杜绝自动类型转换。
Sink端(以JDBC Sink为例,同步到目标PostgreSQL)配置
- 禁用自动表创建与演化:设置
auto.create=false和auto.evolve=false,避免sink连接器因自动推断类型而将目标字段设为double precision,需提前在目标库中创建好类型为numeric的对应字段。 - 确保转换器兼容精确类型:使用支持精确decimal解析的转换器,如
JsonConverter并保持decimal.format=string配置,让sink能直接将字符串形式的numeric值映射到目标库的numeric字段。 - 若使用Debezium自带的sink扩展,可设置
numeric.mapping=strict,强制要求类型严格匹配,拒绝自动转换为double precision。
关键注意事项
- 两端(源、sink)的转换器配置必须保持一致,任何一端的松散配置都可能导致类型转换。
- 目标PostgreSQL表的字段类型需预先定义为
numeric,不能依赖sink的自动建表逻辑。
内容的提问来源于stack exchange,提问作者hishAg
相关产品推荐
相关产品推荐

