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

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:改用自定义验证脚本替代自动验证

  1. 进入AWS DMS控制台,找到目标迁移任务的「验证」配置项。
  2. 针对故障表关闭自动验证,启用「自定义验证」模式。
  3. 编写符合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
    
  4. 保存配置后重新启动验证流程。

方案2:临时调整目标端列类型规避语法错误

  1. 在Postgres目标端,将故障列的类型临时修改为varchar(1),存储0/1对应原bit值。
  2. 重新触发DMS验证,此时空字符串比较不会触发类型错误(需后续验证逻辑正确性)。
  3. 验证完成后,再将列类型改回boolean/numeric(1)(注意主键列修改需暂停同步或处理数据一致性)。

方案3:调整DMS类型映射规则

  1. 在DMS任务的「表映射」中,添加针对SQL Server bit类型的自定义转换规则:
    • 源类型选择bit,目标类型指定为Postgres的varchar(1),自动将0/1转换为字符串存储。
  2. 重新启动迁移任务(或仅验证流程),避免自动生成错误的比较条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:20:55