将多边形数据类型数据从MySql迁移到PostgreSql

问题描述 投票:0回答:1

我必须将数据从 MySQL 迁移到 PostgreSQL。我遇到了一个与几何数据类型有关的问题,但 db 以自己的方式处理它们。 在 mysql 中,多边形数据类型列以十六进制类型存储数据,而在 postgres 中,它以某种文本形式保存。 因此,主要的挑战是以最少的额外工作来迁移数据,即我有多个数据库,并且我正在使用 AWS DMS 来传输数据,因此我希望以最少的停机时间来处理此问题。

我首先尝试在导入的数据上使用像

st_geomfromwkb()
这样的PostGis函数,但它不起作用。只有当我首先使用
st_asbinary()
将多边形列数据转换为二进制,然后删除前两个字母“0x”十六进制表示,然后执行类似的操作时,它才有效。

SELECT ST_AsText(ST_GeomFromWKB( decode('01030000000100000005000000FA570C8A1F8A54C0A500FFCB430A3E40FA570C8A1F8A54C086C93ECB9FB83E40F2DFAD8D615154C086C93ECB9FB83E40F2DFAD8D615154C0A500FFCB430A3E40FA570C8A1F8A54C0A500FFCB430A3E40', 'hex'), 4326));


此外,在使用 DMS 时,我发现了一些功能作为转换规则,将数据类型更改为字节,但它不起作用,它和以前一样,如果它是正确的结果或 DMS 无法转换它。

所以最后我只剩下一种方法,在mysql表中添加一个额外的列,将多边形数据类型坐标转换为文本类型并迁移整个表,然后用我们可以从文本中获取的值替换原始的多边形列 类似的东西

MySQL alter table t1 add column temp longtext; select id, st_astext(polygon) as polygon from beepermd_jeremy.location; ->POLYGON((0 0,0 1,1 1,1 0,0 0)) PostgreSQL update t1 set polygon= st_geomfromtext('POLYGON((0 0,0 1,1 1,1 0,0 0))');
    
mysql postgis spatial aws-dms
1个回答
0
投票
在 MySQL 端:添加生成列,将 GEOMETRY 列转换为其文本表示形式,然后迁移此列而不是二进制值:

CREATE TABLE test ( id INT AUTO_INCREMENT PRimarY KEY, geom GEOMETRY ); INSERT INTO test (geom) SELECT st_geomfromtext('MULTILINESTRING((10 10, 11 11), (9 9, 10 10))') UNION ALL SELECT st_geomfromtext('MULTIPOINT (1 1, 2 2, 3 3)'); SELECT * FROM test;
id几何100000000010500000002000000010200000002000000000000000000244000000000000024400000000000002640000 000000000264001020000000200000000000000000022400000000000002240000000000000244000000000000024402000000000104000000030000000101000000000000000000f03f000000000000f03f01010000 0000000000000000400000000000000040010100000000000000000008400000000000000840
ALTER TABLE test CHANGE COLUMN geom geom_as_binary GEOMETRY INVISIBLE, ADD COLUMN geom TEXT AS (st_astext(geom_as_binary)) AFTER id; SELECT * FROM test;
id几何1多线字符串((10 10,11 11),(9 9,10 10))2多点((1 1),(2 2),(3 3))

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.