将Spatial数据从Oracle迁移到Postgresql

问题描述 投票:4回答:2

我正在尽力将空间数据库从Oracle迁移到Postgresql,但失败了。

我尝试了许多不同的途径,正如您从上一个问题在这里看到的那样,没有一个起作用。有人可以告诉我这样做的一种相对轻松的方式,因为我对此一无所知。

我曾尝试使用第三方软件(例如SwisSQL),但失败并出现许多错误。我试过创建充满insert语句的文件,然后创建一个C#程序来解析这些文件,并用相关的postgis替换oracle空间类型,但由于这些文件的绝对大小,最基本的替换由于内存不足异常而失败。其中一些表中有超过200万条记录,因此您可以想象每个文件包含插入的文件的大小。

我为此迫切需要解决方案,因为它严重阻碍了该项目的进展。我需要Postgresql中的数据,因为我正在编写需要与数据库无关的软件,这意味着必须对每个数据库上的真实数据进行测试。

任何想法都会张开双臂受到欢迎。如果不是从空间角度考虑的话,它会简单得多,并且很可能到现在为止。

编辑:

这里是Toad为Oracle生产的用于说明数据复杂性的插入示例。

Insert into CLUSTER_1000M
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID)
Values
(4410925, 
"MDSYS"."SDO_GEOMETRY"(2003,81989,NULL,
"MDSYS"."SDO_ELEM_INFO_ARRAY"(1,1003,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
"MDSYS"."SDO_ORDINATE_ARRAY"(80000,103280,81000,104280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)), 
"MDSYS"."SDO_GEOMETRY"(2001,81989,
"MDSYS"."SDO_POINT_TYPE"(80500,103780,NULL),NULL,NULL));
oracle postgresql postgis spatial
2个回答
9
投票

[有两种流行的选择:开源ogr2ogrSafe Software的商业产品。

这是我要采用的ogr2ogr解决方案。

首先,您需要正确的工具:GDAL/OGR。如果您使用的是Unix,请使用正确的库进行编译以获得Oracle支持(默认情况下未启用)。但是我假设您使用的是Windows。获取开源地理空间工具的最简单方法是使用OSGeo4W。要启用Oracle对GDAL / OGR的支持,还需要使用“高级安装”模式在setup.exe中选择gdal-oracle10g软件包。有关Oracle软件包的更多信息位于this page,请注意,您还需要提供非免费的OCI.DLL。工作时,您应该看到驱动程序名称显示为ogr2ogr --formats

您从OSGeo4W Shell获得的基本命令应类似于:

ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=password port=5432" OCI:someuser/password layername

这里有关于GDAL / OGR的更多信息:


0
投票

接受的解决方案对我不起作用。

使用OSGeo4W安装GDAL / OGR,并在“高级安装”模式下选择gdal-oracle10g。

然后执行此命令:

ogr2ogr 
-a_srs {{SRS}} 
-overwrite -f 
"PostgreSQL" 
-nln {{POSTGIS SCHEMA}}.{{POSTGIS TABLE}} 
PG:"
host='{{POSTGIS HOST}}' 
port='{{POSTGIS PORT}}' 
user='{{POSTGIS USER}}' 
password='{{POSTGIS PASSWORD}}' 
dbname='{{POSTGIS DATABASE}}'" 
OCI:"{{ORACLE USER}}/{{ORACLE PASSWORD}}
@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = {{ORACLE HOST}})
(PORT = {{ORACLE PORT}})))
(CONNECT_DATA = (SID = {{ORACLE SID}})))
:{{ORACLE SCHEMA}}.{{ORACLE TABLE}}"

用您的值替换{{}}项!

您需要为每个表执行此操作。有一个电子表格可以为您生成这些命令:

http://gis-expert.com/wp/2018/09/12/how-to-migrate-spatial-data-from-oracle-to-postgis/

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