[Gfoss] problemi con indici spaziali sqlite

a.furieri a lqt.it a.furieri a lqt.it
Gio 20 Feb 2014 16:26:47 CET


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 a 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



Maggiori informazioni sulla lista Gfoss