On Thu, 20 Feb 2014 21:44:33 +0100, Luca Lanteri wrote:
Io creo la colonna della geometria con RecoverGeometryColumn(), poi
popolo semplicemente i dati mediante un update della colonna
geometrica, prendendo la geometria da un'atra tabella invece che
dall'interfaccia di qgis. I trigger che popolano gli indici dovrebbero essere scatenati tanto dal mio update quanto da un inserimento diretto
in QGIS, no ?


ok, almeno in teoria torna perfettamente:
- RecoverGeometryColumn() dovrebbe installare tutti i triggers
- dopo di che ogni volta che fai un'INSERT/UPDATE/DELETE l'R*Tree
  verra' immediatamente aggiornato perche' ci pensano comunque i
  triggers in modo automatico.

natualmente, tra la teoria e la pratica c'e' sempre spazio a sufficienza
perche' ci si infili in mezzo lo zoccolo bifido di Messer Satanasso :-)

Spero che cosi sia, visto che sto utilizzando Sqlite proprio per poter
utilizzare le funzionalità dei trigger.


questo fa nascere un dubbio ulteriore: i Triggers di SQLite sono basati
su una buona implementazione, ma ci sono alcuni caveats da tener di conto: - alcune versioni molto vecchie (< 3.7.x) non dovrebbero essere in grado
  di supportare Triggers ricursivi.
  cioe', se un triggers fa partire un secondo trigger che ne scatena un
  terzo etc, con le vecchie versioni dovrebbe partire solo il primo,
  perche' poi la catena si spezza
- ma anche con le versioni recenti, c'e' comunque un limite nei livelli
  di nidificazione supportati dai triggers.
e comunque occorre invocare esplicitamente una PRAGMA per abilitare la
  ricursivita' per i Triggers (by default e' comunque disabled).
  vedi: http://www.sqlite.org/pragma.html#pragma_recursive_triggers


A questo punto, qual'è lo strumento migliore per creare un DB
Spatialite DOC, come lo chiamava Andrea ?


naturalmente il mio non e' un parere spassionato: ma non ho comunque
il minimo dubbio. spatialite CLI oppure SpatiaLite GUI

cioe' i due strumenti piu' strettamente integrati con il DBMS, direttamente gestiti dal medesimo gruppo di sviluppatori che segue il DBMS, e che sono quindi sempre certamente allineati con le specifiche tecniche del DBMS via
via che vanno evolvendosi di versione in versione.
e che piu' facilmente tendono a recepire una vasta casistica di casi d'uso
che spaziono dalle micro-app per Android/smartphones fino alle piu'
complesse applicazioni ultra-professionali in contesti enterprise.



Io li ho sempre creati da QGIS, che tra l'altro nella versione 2.0 mi
pare ci metta un tempo eterno (non vorrei che il problema fosse
proprio li). Con la 2.1 i tempi di creazione sono decisamente più
sensati.


in occasione del rilascio di splite v.4.0 e' stato introdotto un
modestissimo cambiamento in una funzione SQL legata all'inizializzazione
di un nuovo DB.
modifica peraltro messa in forte rilievo nelle note di rilascio, ed
abbondamente discussa piu' e piu' volte nella ML di spatialite.
qgis 2.0 non ha supportato tempestivamente la modifica, e quindi e'
soggetto ad una discreta lentezza in fase di creazione di un nuovo DB
(anche se comunque alla fine i risultati del processo sono perfettamente
corretti); viceversa poi qgis 2.1 e' stato correttamente aggiornato,
ed ora alla fine tutto e' tornato a funzionare in modo ottimale.


Esiste un modo per verificare se un DB Spatialite è corretto ed ha
tutti i trigger e gli indici a posto?


in linea di massima non e' possibile, perche' la casistica "degli
interventi cinesi" (come li chiama Andrea) e' potenzialmente illimitata.
in caso di dubbio una chiamata (tutta di seguito) a questa coppia di
funzioni dovebbe rimettere tutti i Triggers per ciascuna colonna geometrica
correttamente a posto:
- DiscardGeometryColumn()
- RecoverGeometryColumn()

Se ci fossero problemi esiste il modo di farne un repair ?
 

ci sono due funzioni SQL fatte apposta per verificare/ricostruire
gli Spatial Index (quantomeno, nei casi d'uso piu' comuni e ragionevoli):
- CheckSpatialIndex()
- RepairSpatialIndex()

qua ci trovi maggiori informazioni:
http://www.gaia-gis.it/gaia-sins/SpatialIndex-Update.pdf

ciao Sandro
_______________________________________________
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

Rispondere a