[Gfoss] QGIS e Spatialite

a.furieri a lqt.it a.furieri a lqt.it
Sab 4 Ott 2014 11:49:54 CEST


On Sat, 4 Oct 2014 02:28:26 -0700 (PDT), Beppe wrote:
> Salve a tutti,
> Ho eliminato alcune tabelle da un database di Spatialite


Ciao Beppe,

mica per caso le hai eliminate facendo semplicemente una DROP TABLE ?
se e' realmente cosi' hai semplicemente prodotto un DB severamente
danneggiato ed inutilizzabile ;-)


> ma quando connetto
> QGIS al file, nella lista delle tabelle continuano a comparire nella 
> lista
> anche quelle eliminate, anche se non รจ possibile aggiungerle al 
> progetto
> GIS: al tentativo di aggiunta viene visualizzato un messaggio di 
> errore.
> E' possibile far si che su QGIS le tabelle eliminate non compaiano 
> nella
> lista delle tabelle?
>

temo che QGIS c'entri poco o nulla; si limita semplicemente a prendere
atto che deve aprire un DB "scassato", e cerca di arrangiarsi come
meglio gli riesce in condizioni da allarme rosso.

spiegazione succinta:
- col cavolo che una TABLE che contiene Geometrie e' semplicemente
   una tavola come tutte le altre; richiede cautele molto speciali
   e va sempre maneggiata cum grano salis.
- sicuramente una GeoTable e' sempre associata ad una riga nella
   tavola di metadati "geometry_columns"
   se tu droppi la tavola ma non fai anche la DELETE corrispondente
   su "geometry_columns" ecco che nasce una bella frittata.
   (ed immagino che sia proprio per questo motivo che QGIS continua
    a cercare il fantasma della tavola defunta)
- probabilmente su quella tavola che hai droppato c'era uno Spatial
   Index; ecco che hai creato un orfanello che occupa spazio senza
   nessuna utilita' (e che probabilmente ti dara' grattacapi piu'
   avanti se provi a ricreare una tavola con lo stesso nome)
- giusto per brevita' evito di elencare tutte le altre "rotture"
   che potresti avere causato (metadati vari, statistiche etc)

conclusione: per eliminare "a mano" una GeoTable occorrono almeno
cinque o sei passaggi separati. se ne salti anche uno solo ottieni
un DB sicuramente "problematico".

molto meglio utilizzare uno dei tools di supporto che ti consentono
di rimuovere una GeoTable in tutta sicurezza compresi tutti gli
annessi e connessi:
a) se usi spatialite CLI puoi usare la dot macro ".dropgeo"
b) se usi spatialite GUI c'e' un'apposita voce nel menu contestuale
    associato a ciascuna tavola
c) se usi l'ultimissima 4.2.1-RC0 ci trovi anche una funzione SQL
    ad hoc: DropGeomTable()

N.B.: ormai il danno e' fatto. l'unico modo per cercare di recuperare
quel DB e' di ispezionare con calma e pazienza tutte le tavole dei
metadati cercando di pulire tutti i riferimenti "rotti".

ciao Sandro


Maggiori informazioni sulla lista Gfoss