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

如何用AWS SCT&DMS迁移含SDO_GEOMETRY的表至Aurora Postgres

解决方案:Oracle SDO_GEOMETRY 迁移至 Aurora PostGIS 数据报错及列忽略问题

1. 手动创建 Oracle 端 SDOGEOJSON 自定义函数

Oracle 默认没有内置 SDOGEOJSON 函数,需要自行创建将 SDO_GEOMETRY 转换为标准 GeoJSON 格式的函数,供 DMS 调用完成空间数据的迁移转换:

CREATE OR REPLACE FUNCTION SDOGEOJSON(geom SDO_GEOMETRY) RETURN CLOB IS
  geojson CLOB;
BEGIN
  IF geom IS NULL THEN
    RETURN NULL;
  END IF;
  -- 构建 GeoJSON 结构,适配 PostGIS 解析要求
  geojson := '{"type":"' || CASE geom.SDO_GTYPE
    WHEN 2001 THEN 'Point'
    WHEN 2002 THEN 'LineString'
    WHEN 2003 THEN 'Polygon'
    WHEN 2005 THEN 'MultiPoint'
    WHEN 2006 THEN 'MultiLineString'
    WHEN 2007 THEN 'MultiPolygon'
    ELSE 'Geometry'
  END || '","coordinates":' || SDO_UTIL.TO_WKTGEOMETRY(geom) || '}';
  -- 替换 WKT 格式为 GeoJSON 坐标数组格式
  geojson := REPLACE(REPLACE(geojson, '(', '['), ')', ']');
  RETURN geojson;
END;
/

该函数将 Oracle 空间对象转为 DMS 可识别的 GeoJSON 格式,避免迁移时的解析错误。

2. 配置 SCT 转换规则保留空间列

在 SCT 中针对含空间类型的表调整转换规则:

  • 打开对应表的转换规则编辑器,找到 SpatialDataOptionToGeoJsonFunctionName 参数
  • 将其值设置为我们创建的 SDOGEOJSON 函数名
  • 保存规则后重新生成目标 Aurora PostGIS 表结构,此时 shape 列会被正确映射为 PostGIS geometry 类型,不会被忽略

3. 调整 DMS 迁移任务配置

在 DMS 迁移任务的表映射中添加针对空间列的转换规则:

  • 选择目标表,添加转换规则类型为 Modify column
  • 指定空间列(如 shape)的处理方式为 Convert using function,关联源端的 SDOGEOJSON 函数
  • 同时确保 DMS 任务的目标端点配置中开启了 PostGIS 支持(若有相关选项)

完成以上步骤后,重新执行 DMS 迁移任务,即可解决"unexpected end of data"错误,同时保证空间列被正确迁移。

内容的提问来源于stack exchange,提问作者Brian Buechler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:53:23