Recentemente mi è stato chiesto:
Buongiorno. Ho due database spatialite identici nella struttura che raccolgono dati riguardanti uno stesso progetto ma che lavorano su PC diversi. Avrei pertanto la necessità in questo momento di appendere tutti i dati di uno dei due database nell’altro per avere come risultato finale la riunione di tutti i dati dello stesso progetto all’interno di un unico database. Qual è il modo più semplice per fare questa operazione?
Roberto
Questa operazione si puo’ fare almeno in due modi diversi e lascio a voi la scelta.
Usando spatialite_gui 2.1.0 NextGen
Questa è la procedura che ho suggerito a Roberto e riguarda l’uso della GUI di spatialite 5.0 Next Generation versione beta.

connetto il database principale (db_main.sqlite) e tramite Menu|Attach DataBase collego un secondo database (db1.sqlite):
Selezionare la tabella del database ‘attaccato‘ e dal menu contestuale (tasto destro mouse) selezionare Clone Table: definire la tabella in cui ‘appendere i dati’ e spuntare l’ultima opzione ‘Append Mode‘ → OK. Fatto!!!
Usando la riga di comando e GDAL/OGR
Questa è la procedura che preferisco in quanto semplifica parecchio l’intero processo e riguarda la riga di comando usando le librerie GDAL/OGR , un coltellino svizzero per il mondo GIS (cit.).
ogr2ogr -update -append -f SQLite db_main.sqlite -nln "nomeTabella1" db01.sqlite "nomeTabella1"
dove db_main.sqlite è il database principale con la tabella nomeTabella1; db01.sqlite il database con stessa struttura ma nome diverso e con nomeTabella1 la tabella da appendere a quella principale (le tabelle possono avere anche nomi diversi ma la struttura identica.
tutto qui, fatto!
NOTE FINALI: Con la riga di comando si puo’ fare tanto altro, per esempio creare un loop per iterare la procedura per n tabelle. Per maggiori dettagli consultare T’ansignari e T’appeddiri by OpenData Sicilia
EDIT: aggiungo altra soluzione utilizzando uno script SQL:
--
-- the present SQL script is intended to be executed from SpatiaLite_gui
--
-- initializing the output db-file
--
SELECT InitSpatialMetadata(1);
--
-- attaching the input DB-file
ATTACH DATABASE 'C:\Users\Salvatore\Desktop\clone_origin\db1.sqlite' AS input;
SELECT CloneTable('input', 'prov_itf', 'cucu', 1); -- clono la struttura, nuova tabella dal nome cucu
SELECT CloneTable('input', 'prov_itc', 'cucu', 1, '::append::'); -- appendo prima tabella
SELECT CloneTable('input', 'prov_itf', 'cucu', 1, '::append::'); -- appendo seconda tabella
SELECT CloneTable('input', 'prov_itg', 'cucu', 1, '::append::'); -- appendo terza tabella
SELECT CloneTable('input', 'prov_ith', 'cucu', 1, '::append::'); -- appendo quarta tabella
SELECT CloneTable('input', 'prov_iti', 'cucu', 1, '::append::'); -- appendo quinta tabella
-- detaching the input db-file
--
DETACH DATABASE input;
--
-- vacuuming the output db-file
--
VACUUM;
Lo script va copiato e incollato in spatialite_gui oppure salvato con estensione .sql.
Rìferimenti
- Spatialite_gui 2.1.0 beta0;
- Manuale di spatialite;
- Libreria GDAL/OGR;
- Clona Table
Ringraziamenti
- Andrea Borruso by default
- Community OpenDataSicilia by default
se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
se il post vi è stato utile contribuite a mantenerlo aggiornato PayPal
Grazie Totó…questa cosa è utilissima… soprattutto per chi come me lavora usando lo stesso tipo di database su più siti senza poter sfruttare un server per assenza di internet.
"Mi piace"Piace a 1 persona
Ciao,
lo so bene.
buon lavoro
"Mi piace""Mi piace"