我正在尽我最大的努力将一个空间数据库从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));发布于 2012-03-21 15:04:39
有两个流行的选择:开源ogr2ogr或Safe Software的商业产品。
下面是我处理ogr2ogr解决方案的方法。
首先,您需要有正确的工具:GDAL/OGR。如果您使用的是Unix,请使用正确的库进行编译以获得Oracle支持(默认情况下未启用)。但我将假设您使用的是Windows。获取开源地理空间工具的最简单方法是使用OSGeo4W。要启用Oracle对GDAL/OGR的支持,还需要在“高级安装”模式下选择setup.exe中的gdal-oracle10g包。有关Oracle包的更多信息位于this page,请注意,您还需要提供非免费的OCI.DLL。在工作时,您应该会看到驱动程序名称与ogr2ogr --formats一起显示。
您在OSGeo4W外壳中执行的基本命令应该类似于:
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=password port=5432" OCI:someuser/password layername以下是有关GDAL/OGR的更多信息:
驱动程序驱动程序命令用法:http://www.gdal.org/ogr2ogr.html
发布于 2018-09-13 15:00:21
被接受的解决方案对我不起作用。
使用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/
https://stackoverflow.com/questions/9789686
复制相似问题