我已经尝试了许多不同的途径,你可以从我之前的问题中看到,这里没有任何工作.有人可以告诉我一个相对无痛的方式这样做,因为我现在无能为力.
我尝试过使用第三方软件,例如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),"MDSYS"."SDO_ORDINATE_ARRAY"(80000,103280,81000,104280,NULL)),"MDSYS"."SDO_GEOMETRY"(2001,"MDSYS"."SDO_POINT_TYPE"(80500,103780,NULL));
解决方法
以下是我如何处理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的更多信息:
> ogr2ogr命令用法:http://www.gdal.org/ogr2ogr.html
> Oracle驱动程序:http://www.gdal.org/drv_oci.html
> Postgresql / PostGIS驱动程序:http://www.gdal.org/drv_pg.html