Append(ere) dati da un DB SpatiaLite ad un altro

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.

spatialite_gui 2.1.0 beta0

connetto il database principale (db_main.sqlite) e tramite Menu|Attach DataBase collego un secondo database (db1.sqlite):

CloneTable

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

Ringraziamenti

se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
se il post vi è stato utile contribuite a mantenerlo aggiornato PayPal

Annunci

2 pensieri su “Append(ere) dati da un DB SpatiaLite ad un altro

  1. 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.

    Piace a 1 persona

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.