Dopo anni mi vengono chiesti i dati di un vecchio censimento che realizzai utilizzando un database PostgreSQL con estensione spaziale PostGIS, quindi nasce l’esigenza di esportare tutti le tabelle in un database spatialite che, tra l’altro, deve rispettare la suddivisione in due schemi presenti del database postgresql. Subito trovo un bel articolo che fa al caso mio dal titolo ‘da PostGIS a Spatialite‘ scritto da Flavio Rigolon nel 2010.
Modifico leggermente lo script suggerito dall’articolo e, dopo aver letto un pò sulle librerie ogr2ogr, utilizzo il seguente script:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ogr2ogr –config PG_LIST_ALL_TABLES YES –config PG_SKIP_VIEWS NO -f “SQLite” nome_database.sqlite -progress PG:”dbname=’nome_database_pg’ active_schema=public,data_2015 schemas=public,data_2015 host=’localhost’ port=’5432′ user=’postgres’ password=’*********’ ” -lco LAUNDER=yes -dsco SPATIALITE=yes -lco SPATIAL_INDEX=no |
avvio la shell MSYS, installata assieme a QGIS (OSGeo4W), ed incollo lo script di sopra, in meno di 5 secondi ottengo il nuovo database spatialite con tutte le tabelle, wow!!!

Diversamente da quanto descritto nell’articolo di Rigolon (scritto nel 2010), lo script funziona benissimo e non occorre fare ulteriori modifiche, il db.sqlite funziona benissimo in QGIS!!!
Buon lavoro!!!
Veramente interessante l’argomento!
Ho dovuto mettere le mani nella marmellata per tentare di esportare da Postgresql a Spatialite.
Mi è riuscita “abbastanza” bene l’esportazione, (a parte un intoppo nel file di output Spatialite che ho dovuto fare un “update geometry_columns set geometry_type = nr_int where f_table_name = nometabella”, per il resto poi è filato liscio). Devo ancora capire bene come fare un output pulito al 100%.
Dovendo fare un’esportazione periodica, ho creato un file BAT che fa il 99% del “lavoro sporco” 🙂
Riporto il codice qui sotto che basta copiare e incollare in notepad e salvare come *.BAT
@echo off
title — DA POSTGRESQL A SPATIALITE —
color 0D
echo.
echo Ciao!
echo Oggi esporto in Spatialite vari layers del catasto.
echo.
echo.
echo NOTA BENE!
echo Dopo la creazione del db sqlite, bisogna ricreare (a motivo del bug di ogr2ogr) le colonne delle geometrie dei relativi layers in ambiente spatialite.
echo Troverai al termine del processo il nuovo db sqlite e un file TXT con dentro il codice di intervento POST-CREAZIONE da applicare manualmente.
echo.
echo.
pause
if not exist “C:\_PG_TO_FILES\SQLITE\” mkdir “C:\_PG_TO_FILES\SQLITE\”
::call “C:\OSGeo4W64\bin\o4w_env.bat”
call “C:\Programmi\QGIS 3.8\bin\o4w_env.bat”
::CATASTO
ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, pt_ccat as cc, pt_code as num, pt_type, pt_fabb from cat.vl_parcel_poly” -dsco SPATIALITE=YES -lco GEOMETRY_NAME=geo -lco LAUNDER=YES -nln catasto
::CATASTO RIGHT POLY
ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, rp_ccat as cc, rp_code as num, rp_type from cat.vl_right_poly” -lco GEOMETRY_NAME=geo -nln catasto_right_poly
::FIX POINTS
ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, fp_ccat, fp_code, fp_ccode, fp_attend, fp_q_orto, fp_q_elli, fp_geog_fi, fp_geog_la, fp_utm_e, fp_utm_n from cat.fix_points” -lco GEOMETRY_NAME=geo -nln punti_fiduciali
::LOCAL NAME
ogr2ogr -f SQLITE “C:\_PG_TO_FILES\SQLITE\TN_catasto.sqlite” PG:”host=XXXXXXX port=5432 dbname=nomedb user=utente password=*****” -overwrite -sql “select shape, ln_ccat, ln_text, ln_angle from cat.vl_local_name” -lco GEOMETRY_NAME=geo -nln nomi_locali
echo update geometry_columns set geometry_type = 6 where f_table_name in (‘catasto’,’catasto_right_poly’); update geometry_columns set geometry_type = 1 where f_table_name in (‘punti_fiduciali’,’nomi_locali’); > C:\_PG_TO_FILES\SQLITE\Applicami!.txt
echo.
echo.
echo.
echo Wow fatto! 🙂
echo Il db sqlite si trova in “C:\_PG_TO_FILES\SQLITE\”
start C:\_PG_TO_FILES\SQLITE\
echo.
echo Premi un tasto qualsiasi per uscire …
pause>nul
"Mi piace"Piace a 1 persona
Buongiorno Simone,
grazie per aver condiviso la tua esperienza.
"Mi piace""Mi piace"