Nếu bạn muốn làm điều đó bằng lập trình với Python thì có lẽ GDAL / OGR là cách tốt nhất để làm điều đó. Nhìn vào mã ví dụ mẫu sao chép trên bảng từ PostgreSQL vào tệp SHP. Ví dụ không hoàn hảo nhưng bạn có thể dễ dàng sửa đổi nó để phù hợp với nhu cầu của bạn.
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()
Nếu môi trường lập trình của bạn là Windows, thì bạn có thể tải xuống GDAL / OGR từ đây . Một số tài liệu khởi đầu tốt bạn có thể tìm thấy ở đây . Hy vọng nó giúp.