Tenho que importar grandes arquivos de forma (mais de 1 milhão de registros) para o PostGIS, e fiquei pensando sobre a melhor maneira de fazer isso.
Na minha pergunta, usei a palavra "hack", em vez de ferramenta, de propósito, porque acho que não se trata tanto de qual ferramenta, mas de qual conjunto de etapas ou definições de configuração usar. Até agora, tentei o plug-in SPIT (QGIS), a ferramenta shp2pgsql Postgis e a ferramenta GDAL ogr2ogr . Você pode ver minha resenha completa sobre este post. Até agora, acho que todos eles não respondem, ao lidar com um grande conjunto de dados. Eu queria saber se alguém experimentou um problema semelhante e se você poderia compartilhar algo sobre a abordagem.
Após as sugestões do user30184 , Paul Ramsey e minhas próprias experiências. Eu decidi responder a esta pergunta.
Não mencionei nesta pergunta que estou importando dados para um servidor remoto. (embora esteja descrito na postagem do blog a que me refiro). Operações como inserções na Internet estão sujeitas a uma latência de rede. Talvez não seja irrelevante mencionar que este servidor está no Amazon RDS , o que me impede de ssh na máquina e executar operações localmente.
Tendo isso em mente, refiz a engenharia da minha abordagem, usando a diretiva "\ copy" para promover um despejo de dados em uma nova tabela. Penso que esta estratégia é uma chave essencial, que também foi referida nos comentários / respostas a esta pergunta.
Esta operação foi incrivelmente rápida. Desde que importei um CSV, tive todo o trabalho de preencher a geometria, adicionar um índice espacial, etc. Ainda era notavelmente rápido, pois estava executando consultas no servidor .
Decidi comparar também as sugestões do usuário30184 , Paul Ramsey . Meu arquivo de dados era um shapefile de ponto com 3035369 registros e 82 MB.
A abordagem ogr2ogr (usando a diretiva PG_USE_COPY) terminou em 1:03:00 m, que ainda é * muito melhor do que antes.
A abordagem shp2pgsql (usando a diretiva -D) terminou em apenas 00:01:04 m.
Vale dizer que o ogr2ogr criou um índice espacial durante a operação, enquanto o shp2pgsql não. Descobri que é muito mais eficiente criar o índice após a importação, em vez de inchar a operação de importação com esse tipo de solicitação.
A conclusão é: o shp2pgsql, quando adequadamente parametrizado, é extremamente adequado para realizar grandes importações, principalmente aquelas a serem acomodadas no Amazon Web Services.
Você pode ler uma descrição mais detalhada dessas conclusões, na atualização deste post.
fonte