I livelli spaziali (tabelle) in SpatiaLite includono vari oggetti e metadati di supporto, inclusi trigger, indici e voci (almeno) nella geometry_columns
tabella. Sto cercando (preferibilmente) una GUI che gestisca tutte le modifiche necessarie in una volta sola, o (fallback) la documentazione di tutte le modifiche necessarie in modo da non rompere gli strati spaziali.
Le tabelle hanno:
- Entrata
geometry_columns.f_table_name
. - Cinque trigger denominati
[prefix]_[table_name]_geometry
, dove prefisso indica se si tratta di un rollback della transazione o di un aggiornamento dell'indice. - Tre indici spaziali nominati
idx_[table_name]_geometry[_suffix]
Ho provato questo in due applicazioni, QGIS DB Manager e SpatiaLite-GUI.
QGIS DB Manager appare ha i seguenti effetti:
- Si aggiorna correttamente
geometry_columns
con il nuovo nome della tabella - Non rinomina i trigger. La definizione del trigger viene parzialmente modificata in modo che faccia
BEFORE [INSERT|UPDATE|DELETE]
riferimento al nome della nuova tabella, ma la condizione cerca ancora il vecchio nome ingeometry_columns
. - Non rinomina gli indici spaziali. Non sono sicuro se questo è importante perché i trigger fanno ancora riferimento ai vecchi nomi di indice.
Quando si sceglie Manutenzione → Rinomina tabella in SpatiaLite-GUI, si ottiene semplicemente lo stub di ALTER TABLE
un'istruzione SQL . Questo è semplice SQL e fa anche meno di QGIS DB Manager. Se si inserisce il nome della nuova tabella, la tabella viene rinominata. Altri effetti:
- La tabella non viene rinominata
geometry_columns.f_table_name
, il che significa che molti GIS non vedranno la tabella come un livello spaziale. - Non rinomina i trigger. La definizione del trigger viene parzialmente modificata in modo che faccia
BEFORE [INSERT|UPDATE|DELETE]
riferimento al nome della nuova tabella, ma la condizione cerca ancora il vecchio nome ingeometry_columns
. - Non rinomina gli indici spaziali. Non sono sicuro se questo è importante perché i trigger fanno ancora riferimento ai vecchi nomi di indice.
Si noti che Spatialite-GUI offre l'opzione per ripristinare una colonna geometrica che aggiunge la voce corretta a geometry_columns
(ma richiede di specificare SRID, tipo di geometria e dimensioni), per costruire o ricostruire un indice spaziale e per ripristinare i trigger, ma nessuno di queste funzioni rimuovono vecchie righe di tabella, trigger o indici, portando a un DB con un sacco di schmutz (probabilmente innocuo ma fastidioso).