如何用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列会被正确映射为 PostGISgeometry类型,不会被忽略
3. 调整 DMS 迁移任务配置
在 DMS 迁移任务的表映射中添加针对空间列的转换规则:
- 选择目标表,添加转换规则类型为
Modify column - 指定空间列(如
shape)的处理方式为Convert using function,关联源端的SDOGEOJSON函数 - 同时确保 DMS 任务的目标端点配置中开启了 PostGIS 支持(若有相关选项)
完成以上步骤后,重新执行 DMS 迁移任务,即可解决"unexpected end of data"错误,同时保证空间列被正确迁移。
内容的提问来源于stack exchange,提问作者Brian Buechler
相关产品推荐
相关产品推荐

