AWS DMS迁移SQL Server至Aurora Postgres时,含布尔列主键表验证失败
AWS DMS迁移SQL Server到Aurora PostgreSQL验证失败问题解决
问题根源
DMS自动验证逻辑对SQL Server的bit类型处理存在缺陷,生成的Postgres查询错误地将布尔/数值类型列与空字符串''比较,触发Postgres类型语法错误:ERROR: invalid input syntax for type boolean: ""。
可行解决方案
方案1:改用自定义验证脚本替代自动验证
- 进入AWS DMS控制台,找到目标迁移任务的「验证」配置项。
- 针对故障表关闭自动验证,启用「自定义验证」模式。
- 编写符合Postgres语法的验证查询,将原错误的
boolean_column = ''替换为对应逻辑:- 若SQL Server侧
bit列存在NULL值,对应Postgres侧用boolean_column IS NULL - 若SQL Server侧
bit列默认0(false),对应Postgres侧用boolean_column = FALSE
示例修正后的查询:
SELECT cast("pcode" as varchar(6)), "other_columns", "boolean_column" FROM "db"."table" WHERE (((boolean_column IS NULL AND "pcode" > 'L7L3V9') AND (boolean_column IS NULL AND "pcode" <= 'L8L4E8'))) ORDER BY "boolean_column" ASC, "pcode" ASC - 若SQL Server侧
- 保存配置后重新启动验证流程。
方案2:临时调整目标端列类型规避语法错误
- 在Postgres目标端,将故障列的类型临时修改为
varchar(1),存储0/1对应原bit值。 - 重新触发DMS验证,此时空字符串比较不会触发类型错误(需后续验证逻辑正确性)。
- 验证完成后,再将列类型改回
boolean/numeric(1)(注意主键列修改需暂停同步或处理数据一致性)。
方案3:调整DMS类型映射规则
- 在DMS任务的「表映射」中,添加针对SQL Server
bit类型的自定义转换规则:- 源类型选择
bit,目标类型指定为Postgres的varchar(1),自动将0/1转换为字符串存储。
- 源类型选择
- 重新启动迁移任务(或仅验证流程),避免自动生成错误的比较条件。
内容的提问来源于stack exchange,提问作者himanish.k
相关产品推荐
相关产品推荐

