Amazon DMS未完整复制删除CDC记录,仅获主键与Op字段求助
解决DMS从RDS PostgreSQL到S3的CDC删除记录无完整行镜像问题
以下是针对性的排查和解决步骤:
1. 检查PostgreSQL表的REPLICA IDENTITY配置
PostgreSQL默认仅在WAL中记录删除操作的主键字段,要获取完整行镜像,必须将目标表的REPLICA IDENTITY设置为FULL:
- 执行SQL命令修改表配置:
ALTER TABLE your_target_table REPLICA IDENTITY FULL; - 验证配置:
返回结果中SELECT relname, relreplident FROM pg_class WHERE relname = 'your_target_table';relreplident应为f(代表FULL)。
2. 确认RDS PostgreSQL的逻辑复制参数
确保RDS实例已开启逻辑复制:
- 检查
rds.logical_replication参数值为1(可在RDS控制台的参数组中查看/修改)。 - 修改参数后需重启RDS实例生效。
3. 验证DMS任务与端点配置
- 源端点权限:确认DMS使用的数据库用户拥有
REPLICATION权限,以及目标表的SELECT权限。 - 任务CDC设置:在DMS任务的「任务设置」中,确认已正确启用CDC,且未配置字段过滤规则导致非主键字段被排除。
- S3目标配置:检查S3目标的CDC输出格式设置,确保未勾选仅输出主键的选项。
4. 间接验证WAL记录内容
虽然无法直接访问RDS的复制存储,但可通过临时逻辑复制槽验证WAL是否记录完整行:
- 创建测试逻辑复制槽:
SELECT pg_create_logical_replication_slot('test_cdc_slot', 'pgoutput'); - 执行测试删除操作。
- 读取槽内的CDC记录:
SELECT * FROM pg_logical_slot_get_changes('test_cdc_slot', NULL, NULL); - 若返回的删除记录包含完整字段,则问题出在DMS配置;若仅含主键,则PostgreSQL侧的配置仍有问题。
- 测试完成后删除槽:
SELECT pg_drop_replication_slot('test_cdc_slot');
5. 排查DMS任务日志
查看DMS任务关联的CloudWatch日志,搜索关键词如missing column、replica identity、CDC,定位是否存在权限不足、配置错误或表结构不兼容等提示。
内容的提问来源于stack exchange,提问作者Saljooq Altaf
相关产品推荐
相关产品推荐

