Come giustamente gia' ricordava Andrea, il corretto funzionamento
degli Spatial Index su SQLite/SpatiaLite e' interamente basato
su alcuni Triggers; se quei triggers mancano (oppure sono stati
alterati, o se sono dichiarati in modo "artistico") lo Spatial
Index sara' sicuramente soggetto a problemi di out-of-sync
piu' o meno gravi..
il secondo elemento critico per il buon funzionamento degli
Spatial Index e' l'assoluta coerenza ed immutabilita dei ROWIDs.
quindi in tutti questi casi lo Spatial Index puo' soffrire di
pesanti problemi di out-of-sync come quelli descritti da Luca:
a) tavola senza una PRIMARY KEY
b) tavola con una PRIMARY KEY che non consista in un'unica colonna
di tipo INTEGER (p.es. TEXT, oppure multi-column)
c) tavola contenete una colonna "fisica" di nome ROWID
d) a partire dalla versione 3.8.x di SQLite: tavola creata con
la clausola WITHOUT ROWID
per ulteriori approfondimenti tecnici (compresi gli stumenti
standard di check/repair, disponibili anche come funzioni SQL):
http://www.gaia-gis.it/gaia-sins/SpatialIndex-Update.pdf
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=Shadowed+ROWID+issues
ciao Sandro
On Thu, 20 Feb 2014 15:41:12 +0100, Andrea Peri wrote:
L'automatismo dipende dai gradi di liberta' che hai.
E quindi dall'ambiente in cui ti muovi e che tipo di operazioni devi
eseguire.
Io pero' cercherei di capire come vai l'indice si rovina.
Interessante questo fatto che vi sia una distonia tra qspatialite e
dbmanager.
Sospetto che manchi qualche trigger.
:)
Ovvero un db spatialite DOP prevede la assegnazione di un certo
numero
di triggers che svolgono alcuni compiti tra cui anche quelli di
tenere
llineati i dati che uno inserisce / rimuove / aggiorna con la tabella
di indice spaziale.
Se pero' la creazione del db spatialite è eseguita con procedure
"cinesi" ,
il DB non è DOP e quindi magari non aggiorna l'indice quando
inserisci (ad esempio).
E questo potrebbe spiegare la scomparsa di certi dati.
Tieni presente che cio' che conta è l'ambiente che cra materialmente
il DB ovvero che lo inizializza, non l'ambiente che lo usa poi.
A margine, è interessante questo fatto che qspatialite e dbmanager
non sono allineati sulla costruzione del db spatialite.
Questa cosa vorrei capirla meglio:
puoi fornire maggiori dettagli:
versione di qgis, versione di spatialite, sistema operativo ?
Grazie,
Andrea.
Il giorno 20 febbraio 2014 15:31, Luca Lanteri ha scritto:
Ciao a tutti,
sto sbattendo la testa contro alcuni problemi con gli indici
spaziali di spatialite.
In diversi casi ho la sensazione che gli indici spaziali di alcuni
miei layer siano corrotti. Me ne accorgo perché cercando di
interrogare un layer lo strumento interrogazione non "vede" gli
oggetti. Se elimino e ricreo l'indice tutto torna a funzionare.
Vorrei però evitare di dover far fare quest'operazione agli utenti
che utilizzano il mio db perché mi rimane difficile spiegarli come
farlo.
Sapete darmi se esiste un modo semplice per risolvere il problema, o
se (ancora meglio) posso fare la ricostruzione degli indici in modo
automatico ?
Tra l'altro l'unico modo che ho trovato per ricreare gli indici
senza scrivere codice SQL e con QSpatialite, che però si rifiuta di
aprire i DB creati con DBmanager dicendomi che il db non è un db
Spatialite valido. In alcuni casi dicendogli di correggere torna
tutto a posto, in altri casi no.
grazie in anticipo
Luca
_______________________________________________
Gfoss@lists.gfoss.it [1]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss [2]
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le
posizioni dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013
_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni
dell'Associazione GFOSS.it.
666 iscritti al 22.7.2013