Пакетная загрузка нескольких шейп-файлов в Postgis

11

Согласно shp2pgsqlсправке, варианты удаления , добавления , создания и подготовки являются взаимоисключающими. Поэтому, если я хочу создать таблицу из фигуры, а затем добавить несколько других шейп-файлов, я делаю что-то вроде следующего, сохраняя счетчик, чтобы указать, находимся ли мы в режиме создания или добавления.

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

Это работает, как и ожидалось, но я часто задавался вопросом, есть ли более простой способ?

Джон Пауэлл
источник

Ответы:

4

Если вы можете использовать ogr2ogr, он будет игнорировать параметры создания при добавлении и игнорировать параметры добавления при создании.

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

Или в окнах в командной строке:

for /R %f in (*.shp) do ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -nln schema.table_name "%f"
HeikkiVesanto
источник
1
Конечно, ogr2ogr работает. Понял, что будет простое решение. Спасибо
Джон Пауэлл