Перенос пространственных данных из Oracle в Postgresql - PullRequest
4 голосов
/ 20 марта 2012

Я стараюсь изо всех сил перенести пространственную базу данных из Oracle в Postgresql и с треском провалился.

Я пробовал много разных путей, как вы можете видеть из моего предыдущего вопроса здесь, и ни один из них не работает.Может кто-нибудь сказать, пожалуйста, относительно относительно безболезненный способ сделать это, поскольку я теперь не знаю с этим.

Я пытался использовать стороннее программное обеспечение, такое как SwisSQL, но это не удалось с множеством ошибок.Я попытался создать файлы, полные операторов вставки, а затем создал программу на C # для их синтаксического анализа и замены пространственных типов оракула соответствующими постгисными, и это не удалось с исключением из-за нехватки памяти при самых простых заменах из-за огромного размера этих файлов.,В некоторых таблицах содержится более 2 миллионов записей, поэтому вы можете себе представить размер файла, содержащего вставки для каждой из них.

Я очень отчаянно нуждаюсь в решении этой проблемы, поскольку это серьезно затрудняет прогресс в этой области.этот проект.Мне нужны данные в 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));

Ответы [ 2 ]

9 голосов
/ 21 марта 2012

Существует два популярных варианта: с открытым исходным кодом ogr2ogr или коммерческое предложение от Safe Software .

Вот как я подхожу к решению ogr2ogr.

Во-первых, вам нужны правильные инструменты: GDAL / OGR .Если вы работаете в Unix, скомпилируйте, используя нужные библиотеки, чтобы получить поддержку Oracle (по умолчанию не включена).Но я собираюсь предположить, что вы находитесь на Windows.Самый простой способ получить геопространственные инструменты с открытым исходным кодом - OSGeo4W .Чтобы включить поддержку Oracle для GDAL / OGR, вам также необходимо выбрать пакет gdal-oracle10g в файле setup.exe в режиме «Расширенная установка».Более подробная информация о пакете Oracle находится по адресу на этой странице , и обратите внимание, что вам также необходимо предоставить несвободный 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:

0 голосов
/ 13 сентября 2018

Принятое мной решение не сработало.

Установите GDAL / OGR с помощью OSGeo4W и в режиме расширенной установки выберите 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 / как к Migrate-пространственно-данных из-оракула к PostGIS /

...