PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Scripts Python para ingerir um shapefile em um banco de dados PostgreSQL/PostGIS utilizando shp2pgsql.exe no Windows


Aqui estão algumas modificações que devem fazer a coisa funcionar. Observe que ele precisaria de mais modificações se você precisar ser notificado se algum dos comandos falhar. Observe que ele falhará para mais de um shapefile, pois um new_shp_table table já existirá até que você tenha mais lógica para mover ou renomear essa tabela em outro lugar ou carregá-la com um nome exclusivo.

Além disso, observe que o PostgreSQL 8.4 chegará ao fim de sua vida útil ainda este ano, portanto, você pode planejar atualizar para uma versão mais recente antes que seja tarde demais.
import os, subprocess

# Choose your PostgreSQL version here
os.environ['PATH'] += r';C:\Program Files (x86)\PostgreSQL\8.4\bin'
# http://www.postgresql.org/docs/current/static/libpq-envars.html
os.environ['PGHOST'] = 'localhost'
os.environ['PGPORT'] = '5432'
os.environ['PGUSER'] = 'someuser'
os.environ['PGPASSWORD'] = 'clever password'
os.environ['PGDATABASE'] = 'geometry_database'

base_dir = r"c:\shape_file_repository"
full_dir = os.walk(base_dir)
shapefile_list = []
for source, dirs, files in full_dir:
    for file_ in files:
        if file_[-3:] == 'shp':
            shapefile_path = os.path.join(base_dir, file_)
            shapefile_list.append(shapefile_path)
for shape_path in shapefile_list:
    cmds = 'shp2pgsql "' + shape_path + '" new_shp_table | psql '
    subprocess.call(cmds, shell=True)