将SPATIAL数据从Oracle迁移到Postgresql

时间:2012-03-20 15:25:42

标签: oracle postgresql postgis spatial

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

我已经尝试过许多不同的途径,你可以从我之前的问题中看到,这里没有任何工作。有人可以告诉我一个相对无痛的方式这样做,因为我现在无能为力。

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

我非常渴望解决这个问题,因为它严重阻碍了这个项目的进展。我需要Postgresql中的数据,因为我正在编写需要与数据库无关的软件,这意味着它必须在每个数据库上的实际数据上进行测试。

任何想法都会张开双臂欢迎。如果它不是这个的空间方面,它将更加简单,现在最有可能完成。

编辑:

以下是Toad for 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));

2 个答案:

答案 0 :(得分:9)

有两种流行的选择:开源ogr2ogr或来自Safe Software的商业广告。

以下是我如何处理ogr2ogr解决方案。

首先,您需要使用正确的工具:GDAL/OGR。如果您使用的是Unix,请使用正确的库进行编译以获得Oracle支持(默认情况下不启用)。但我会假设你在Windows上。获取开源地理空间工具的最简单方法是使用OSGeo4W。要启用对GDAL / OGR的Oracle支持,还需要使用“高级安装”模式在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的更多信息:

答案 1 :(得分: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/