AWS DMS迁移PostgreSQL RDS时未迁移text字段问题咨询
AWS DMS迁移PostgreSQL RDS时text字段无数据的原因及CFT配置修复
可能的原因
- 源端点连接属性未配置到位:AWS DMS对PostgreSQL的text类型处理需要特定参数支持,未开启相关属性会导致text字段数据无法被捕获或传输。
- 任务表映射规则误过滤text字段:CFT配置的表映射中,可能存在列级筛选规则意外排除了text类型字段;或是列映射配置未明确包含text字段。
- 旧版DMS复制实例兼容性问题:较早版本的DMS复制实例对PostgreSQL text类型的支持不完善,会导致数据迁移失败。
CFT JSON配置修改方案
1. 修正源端点的ExtraConnectionAttributes
在CFT的源PostgreSQL端点配置中,添加或调整ExtraConnectionAttributes参数,确保包含关键设置:
"SourceEndpoint": { "Type": "AWS::DMS::Endpoint", "Properties": { "EndpointType": "source", "EngineName": "postgres", "ExtraConnectionAttributes": "useUnicode=true;enableTextFormatting=true;", // 其他必填属性(如ServerName、Port、DatabaseName等) } }
useUnicode=true:保证DMS正确处理Unicode编码的text字段数据。enableTextFormatting=true:开启文本格式数据的解析,避免text字段被当作二进制数据或直接忽略。
2. 检查并修正表映射规则
在DMS任务的TableMappings配置中,确保没有排除text字段的规则:
- 若使用
selection-rules,确认无针对text列的过滤条件; - 若使用
column-mappings,明确包含需要迁移的text字段,示例如下:
"TableMappings": "{ \"rules\": [ { \"rule-type\": \"selection\", \"rule-id\": \"1\", \"rule-name\": \"1\", \"object-locator\": { \"schema-name\": \"%\", \"table-name\": \"%\" }, \"rule-action\": \"include\" }, { \"rule-type\": \"column-mapping\", \"rule-id\": \"2\", \"rule-name\": \"2\", \"object-locator\": { \"schema-name\": \"your_schema\", \"table-name\": \"your_table\" }, \"rule-action\": \"include\", \"column-mappings\": \"your_text_column, your_text_column\" } ] }"
如果是全局包含所有列,确保column-mappings设置为*,不要手动排除text字段。
3. 升级复制实例版本
如果使用的是旧版DMS复制实例,建议升级到3.4.5及以上的兼容版本,新版本对PostgreSQL text类型的支持更稳定完善。
内容的提问来源于stack exchange,提问作者titan31
相关产品推荐
相关产品推荐

