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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:55:22