Carga por lotes múltiples archivos de forma en Postgis

11

Según la shp2pgsqlayuda, las opciones de descartar , agregar , crear y preparar son mutuamente excluyentes. Entonces, si quiero crear una tabla a partir de una forma y luego agregar varios otros archivos de forma, hago algo como lo siguiente, manteniendo un contador para indicar si estamos en modo de creación o anexión.

cnt=0
for shp in $(ls *.shp); do

if [ $cnt -eq  0 ]  ; then

   shp2pgsql -s 27700 -c $shp schema.table_name | psql -h localhost db 

else

   shp2pgsql -s 27700 -a $shp schema.table_name | psql -h localhost db 

fi
((cnt++))
done

Esto funciona, como se esperaba, pero a menudo me he preguntado si hay una manera más simple.

John Powell
fuente

Respuestas:

4

Si puede usar ogr2ogr, ignorará las opciones de creación al agregar e ignorará las opciones de agregar al crear.

for shp in $(ls *.shp);
do
  ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -a_srs 27700 -nln schema.table_name $shp
done

O en ventanas en la línea de comando:

for /R %f in (*.shp) do ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -nln schema.table_name "%f"
HeikkiVesanto
fuente
1
Claro, ogr2ogr funciona. Pensé que habría una solución simple. Gracias
John Powell