关于AWS DMS中LOB最大尺寸及迁移报错的技术问询
AWS DMS PostgreSQL迁移疑问解答
场景回顾
已部署AWS RDS PostgreSQL实例,表A数据量约2TB,无主键/唯一索引(无唯一数据无法设置),tags列(text[]或_text类型)带有非空约束。使用AWS DMS迁移时:
- 全LOB模式(Full LOB)报错:
Source must have primary key or unique index、null value is not allowed on column tags - 最大限制100MB的有限LOB模式(Limited LOB)迁移成功,但收到提示:
LOBs that exceed the maximum LOB size are truncated
疑问解答
AWS所指的maximum size of LOBs是单条行中tags数据的大小吗?
是。AWS DMS的maximum LOB size限制的是单条记录中单个LOB字段的实际存储大小,对应PostgreSQL里的TOAST存储大小,也就是单条行里tags列的内容大小。还是整个tags列的总大小?
不是。这个限制仅针对单条记录的单个LOB字段,和整个列的总数据量无关。为何Full LOB模式报错而limited模式正常?
核心差异来自两种模式的底层逻辑:- 主键/唯一索引要求:Full LOB模式需要主键或唯一索引来精准定位每条记录,确保LOB数据的全量和增量同步完整性。你的表没有这类索引,直接触发
Source must have primary key or unique index报错。而Limited LOB模式将LOB数据作为普通字段批量迁移,不需要依赖主键/唯一索引定位记录,因此绕过了这个限制。 - 非空约束兼容性:Full LOB模式对PostgreSQL的
text[]/_text这类复杂数组类型的解析逻辑存在兼容性问题,可能误将合法的非空数组解析为null值,触发tags列的非空约束报错。Limited LOB模式的类型处理逻辑不同,不会出现这种误解析,因此能通过非空校验。
- 主键/唯一索引要求:Full LOB模式需要主键或唯一索引来精准定位每条记录,确保LOB数据的全量和增量同步完整性。你的表没有这类索引,直接触发
内容的提问来源于stack exchange,提问作者confusedWarrior
相关产品推荐
相关产品推荐

