Мне нужно импортировать большие файлы шейп-файлов (> 1 миллион записей) в PostGIS, и я задумался о том, как лучше всего это сделать.
В своем вопросе я специально использовал слово «хак» вместо инструмента, потому что я думаю, что дело не в том, какой инструмент, а в том, какой набор шагов или настроек конфигурации использовать. До сих пор я пробовал плагин SPIT (QGIS), инструмент Postgis shp2pgsql и инструмент ogr2ogr GDAL . Вы можете просмотреть мой полный обзор этого поста. Пока что я считаю, что все они действительно не отвечают, когда имеют дело с большим набором данных. Мне было интересно, если кто-то сталкивался с подобной проблемой, и вы могли бы поделиться чем-то о подходе.
После предложения пользователя user30184 , Пола Рэмси и моих собственных экспериментов. Я решил ответить на этот вопрос.
В этом вопросе я не упомянул, что импортирую данные на удаленный сервер. (хотя это описано в блоге, на который я ссылаюсь). Операции, такие как вставки, через Интернет подвержены задержке в сети. Возможно, не имеет значения упоминать, что этот сервер находится на Amazon RDS , что не позволяет мне подключиться по ssh к компьютеру и выполнять операции локально.
Имея это в виду, я пересмотрел свой подход, используя директиву \ copy, чтобы создать дамп данных в новую таблицу. Я думаю, что эта стратегия является важным ключом, о котором также говорилось в комментариях / ответах на этот вопрос.
Эта операция была невероятно быстрой. Так как я импортировал CSV, у меня была вся работа по заполнению геометрии, добавлению пространственного индекса и т. Д. Это было все еще на удивление быстро, так как я тогда выполнял запросы на сервере .
Я решил также сравнить предложения от пользователя user30184 , Пола Рэмси . Мой файл данных представлял собой точечный шейп-файл с 3035369 записями и 82 МБ.
Подход ogr2ogr (с использованием директивы PG_USE_COPY) завершился через 1:03:00 м, что все еще * намного лучше, чем раньше.
Подход shp2pgsql (с использованием директивы -D) завершился всего за 00:01:04 м.
Стоит сказать, что во время операции ogr2ogr создал пространственный индекс, а shp2pgsql - нет. Я обнаружил, что гораздо эффективнее создать индекс после выполнения импорта, чем раздувать операцию импорта с этим типом запроса.
Вывод таков: shp2pgsql, при правильной параметризации, очень хорошо подходит для выполнения больших импортов, а именно тех, которые должны быть размещены в Amazon Web Services.
Более подробное описание этих выводов вы можете прочитать в обновлении этого поста.
источник