Oracle insert语句的等效空间类型

Oracle insert语句的等效空间类型,oracle,postgresql,postgis,Oracle,Postgresql,Postgis,我有许多文件包含大量Insert语句(由Toad for Oracle生成),需要在Postgresql数据库上运行这些语句 听起来很简单,我知道,但也有oracle特定的空间数据类型阻碍了我的工作。我尝试使用许多工具(从SwisSQL到SDO2Shp)来迁移数据,但都没有任何帮助,因此我剩下的唯一尝试计划是拿出一个C#程序来打开文件,将oracle特定的类型替换为可以在postgis中工作的类型,然后再次保存文件。问题是,我不知道我可以用Oracle的类型替换哪些类型,也不知道我必须使用的格式

我有许多文件包含大量Insert语句(由Toad for Oracle生成),需要在Postgresql数据库上运行这些语句

听起来很简单,我知道,但也有oracle特定的空间数据类型阻碍了我的工作。我尝试使用许多工具(从SwisSQL到SDO2Shp)来迁移数据,但都没有任何帮助,因此我剩下的唯一尝试计划是拿出一个C#程序来打开文件,将oracle特定的类型替换为可以在postgis中工作的类型,然后再次保存文件。问题是,我不知道我可以用Oracle的类型替换哪些类型,也不知道我必须使用的格式或语法

我对postgresql和postgis非常陌生,我的oracle知识也很有限,因为我以前使用过SQL Server

下面是Insert语句的一个示例。它们都将具有与此相同的格式,因为表格相同,但地图上不同缩放级别的数据不同

Insert into CLUSTER_1000M
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID)
Values
(4410928, 
"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,106280,81000,107280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,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,106780,NULL),NULL,NULL));

如何将其转换为可与postgis一起使用的格式

我不知道Oracle GIS实现是如何工作的:

但从数据来看,我认为转换是不可能的(可能是这样,但努力可能是巨大的)

看看路

PostGIS讲述了如何显示/存储数据,并提供了帮助开发人员实现这一点的方法。这种转换主要是以*为名称的
*转换。因此,要从中创建正确的数据,输出类似于
aline

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
        ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;

aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
从Oracle的示例输出判断,格式非常不同,可能无法转换(如果Oracle不提供能够遵守标准的内容)

另一方面,当看到


您可能可以将一些Oracle名称替换为PostGIS的名称,因此
SDO_-ordination_数组(1,1,5,7)
可能会变成类似于
ST_-GeomFromText(LINESTRING(1,5 7))

我不知道Oracle GIS实现是如何工作的:

但从数据来看,我认为转换是不可能的(可能是这样,但努力可能是巨大的)

看看路

PostGIS讲述了如何显示/存储数据,并提供了帮助开发人员实现这一点的方法。这种转换主要是以*
为名称的
*转换。因此,要从中创建正确的数据,输出类似于
aline

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
        ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;

aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
从Oracle的示例输出判断,格式非常不同,可能无法转换(如果Oracle不提供能够遵守标准的内容)

另一方面,当看到

您可能可以将一些Oracle名称替换为PostGIS的名称,因此
SDO_坐标数组(1,1,5,7)
可能会变成类似
ST_GeomFromText(LINESTRING(1,5,7))

INSERT INTO cola_markets VALUES(
  1,
  'cola_a',
  SDO_GEOMETRY(
    2003,  -- two-dimensional polygon
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
    SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
          -- define rectangle (lower left and upper right) with
          -- Cartesian-coordinate data
  )
);