首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将空间数据从Oracle迁移到Postgresql

将空间数据从Oracle迁移到Postgresql
EN

Stack Overflow用户
提问于 2012-03-20 23:25:42
回答 2查看 7.9K关注 0票数 4

我正在尽我最大的努力将一个空间数据库从Oracle迁移到Postgresql,但失败得很惨重。

我已经尝试了许多不同的方法,你可以从我之前的问题中看到,没有一个是有效的。有没有人能告诉我一种相对无痛的方法,因为我现在对此一无所知。

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

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

任何想法都会受到欢迎。如果不是因为空间方面的原因,它会简单得多,而且很可能现在已经完成了。

编辑:

以下是Toad为Oracle生成的一个插入示例,它提供了数据复杂性的概念。

代码语言:javascript
复制
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));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-21 15:04:39

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

下面是我处理ogr2ogr解决方案的方法。

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

您在OSGeo4W外壳中执行的基本命令应该类似于:

代码语言:javascript
复制
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

  • Oracle驱动程序:http://www.gdal.org/drv_oci.html

  • PostgreSQL/PostGIS ogr2ogr:http://www.gdal.org/drv_pg.html
票数 9
EN

Stack Overflow用户

发布于 2018-09-13 15:00:21

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

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

然后执行以下命令:

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9789686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档