AWS DMS迁移PostgreSQL到S3时LOB列丢失问题求助
解决AWS DMS迁移PostgreSQL到S3时LOB列缺失的问题
问题根源
日志提示的核心原因是:包含LOB类型列的表没有主键或唯一索引,AWS DMS无法可靠追踪行与LOB数据的对应关系,因此会自动移除这些LOB列。调整「Maximum LOB size」仅控制DMS能处理的LOB数据最大尺寸,无法解决无主键/唯一索引导致的LOB列被跳过的问题。
可行解决办法
1. 给表添加主键或唯一索引
这是最直接的解决方案,让DMS能准确定位行数据:
- 直接修改源表(如果权限允许):
-- 添加主键 ALTER TABLE schema.table ADD CONSTRAINT pk_table PRIMARY KEY (unique_column); -- 或添加唯一索引 CREATE UNIQUE INDEX idx_table_unique ON schema.table (unique_column); - 不修改源表,通过DMS表映射指定主键:
在迁移任务的「表映射」中,为目标表添加primary-key属性,指定一个或多个能唯一标识行的列。示例JSON配置:{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "include_table", "object-locator": { "schema-name": "schema", "table-name": "table" }, "rule-action": "include" }, { "rule-type": "object", "rule-id": "2", "rule-name": "set_primary_key", "object-locator": { "schema-name": "schema", "table-name": "table" }, "rule-action": "modify", "attributes": [ { "name": "primary-key", "value": "column1,column2" } ] } ] }
2. 配置DMS的LOB全加载模式
在迁移任务设置中,将LOB处理策略改为Full LOB mode(全LOB模式),同时确保「Maximum LOB size」设置大于你的LOB列实际最大尺寸。注意:该模式仅在全加载阶段生效,且仍建议配合主键/唯一索引使用,否则可能出现数据一致性问题。
3. 自定义SQL导出LOB表数据
如果以上方法无法实施,可直接用PostgreSQL的COPY命令将包含LOB列的表数据导出到S3,再与DMS迁移的其他数据合并:
COPY schema.table TO 's3://your-bucket/table_export.csv' WITH ( FORMAT CSV, HEADER, DELIMITER ',', ACCESS_KEY_ID 'your_aws_access_key', SECRET_ACCESS_KEY 'your_aws_secret_key' );
执行前需确保PostgreSQL实例有访问S3的权限,或使用IAM角色进行授权。
内容的提问来源于stack exchange,提问作者Renan Nogueira
相关产品推荐
相关产品推荐

