Si desea hacerlo mediante programación con Python, entonces probablemente GDAL / OGR es la mejor manera de hacerlo. Mire el ejemplo de código de ejemplo que se copia en la tabla de PostgreSQL en el archivo SHP. El ejemplo no es perfecto, pero puede modificarlo fácilmente para adaptarlo a sus necesidades.
import os
os.environ['PATH'] = "c:\\Program Files\\GDAL\\bin" + ';' + os.environ['PATH']
os.environ['GDAL_DRIVER_PATH'] = "c:\\Program Files\\GDAL\\bin\\gdal\\plugins-optional"
os.environ['GDAL_DATA'] = "c:\\Program Files\\GDAL\\bin\\gdal-data"
import ogr
conn=ogr.Open("PG: host=192.168.5.3 dbname=some_database user=postgres password=xxxx")
if conn is None:
print 'Could not open a database or GDAL is not correctly installed!'
sys.exit(1)
output = "d:\\points.shp"
# Schema definition of SHP file
out_driver = ogr.GetDriverByName( 'ESRI Shapefile' )
out_ds = out_driver.CreateDataSource(output)
out_srs = None
out_layer = out_ds.CreateLayer("point", out_srs, ogr.wkbPoint)
fd = ogr.FieldDefn('name',ogr.OFTString)
out_layer.CreateField(fd)
layer = conn.GetLayerByName("point_data")
#layer = conn.ExecuteSQL(sql)
feat = layer.GetNextFeature()
while feat is not None:
featDef = ogr.Feature(out_layer.GetLayerDefn())
featDef.SetGeometry(feat.GetGeometryRef())
featDef.SetField('name',feat.TITLE)
out_layer.CreateFeature(featDef)
feat.Destroy()
feat = layer.GetNextFeature()
conn.Destroy()
out_ds.Destroy()
Si su entorno de programación es Windows, puede descargar GDAL / OGR desde aquí . Algunos buenos materiales de partida que puedes encontrar aquí . Espero eso ayude.