Les couches spatiales (tables) dans SpatiaLite incluent divers objets et métadonnées de support, y compris des déclencheurs, des index et des entrées (au minimum) dans la geometry_columns
table. Je recherche (de préférence) une interface graphique qui gérerait toutes les modifications nécessaires en une seule fois, ou une documentation (de secours) de toutes les modifications requises afin de ne pas casser les couches spatiales.
Les tableaux ont:
- Entrée dans
geometry_columns.f_table_name
. - Cinq déclencheurs nommés
[prefix]_[table_name]_geometry
, où le préfixe indique s'il s'agit d'une restauration de transaction ou d'une mise à jour d'index. - Trois indices spatiaux nommés
idx_[table_name]_geometry[_suffix]
J'ai essayé cela dans deux applications, QGIS DB Manager et SpatiaLite-GUI.
QGIS DB Manager semble avoir les effets suivants:
- Mises à jour correctes
geometry_columns
avec le nouveau nom de table - Ne renomme pas les déclencheurs. La définition du déclencheur est partiellement modifiée afin de faire
BEFORE [INSERT|UPDATE|DELETE]
référence au nouveau nom de table, mais la condition recherche toujours l'ancien nom dansgeometry_columns
. - Ne renomme pas les indices spatiaux. Je ne sais pas si cela est important car les déclencheurs se réfèrent toujours aux anciens noms d'index.
Lorsque vous choisissez Maintenance → Renommer la table dans SpatiaLite-GUI, vous obtenez simplement le talon d'une ALTER TABLE
instruction SQL . Il s'agit de SQL simple et fait encore moins que QGIS DB Manager. Si vous remplissez le nouveau nom de table, la table est renommée. Autres effets:
- Le tableau n'est pas renommé
geometry_columns.f_table_name
, ce qui signifie que de nombreux SIG ne verront pas le tableau comme une couche spatiale. - Ne renomme pas les déclencheurs. La définition du déclencheur est partiellement modifiée afin de faire
BEFORE [INSERT|UPDATE|DELETE]
référence au nouveau nom de table, mais la condition recherche toujours l'ancien nom dansgeometry_columns
. - Ne renomme pas les indices spatiaux. Je ne sais pas si cela est important car les déclencheurs se réfèrent toujours aux anciens noms d'index.
Notez que Spatialite-GUI donne la possibilité de récupérer une colonne de géométrie qui ajoute l'entrée correcte geometry_columns
(mais vous oblige à spécifier le SRID, le type de géométrie et les dimensions), à construire ou à reconstruire un index spatial et à récupérer des déclencheurs, mais aucun de ces fonctions suppriment les anciennes lignes de table, les déclencheurs ou les index, conduisant à une base de données contenant beaucoup de schmutz (éventuellement inoffensifs mais ennuyeux).
la source
Réponses:
Vous devez copier la table avec un nouveau nom de table et renommer les colonnes lorsque vous copiez les données. Une fonction de gestionnaire de table serait idéale pour cela, mais n'a pas encore été créée pour l'interface graphique. Le lien ci-dessous montre des informations formelles pour cela avec un exemple de code dans SQLite. SpatiaLite fait partie de SQLite donc le codage est le même. Bonne chance!
https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/
la source
ALTER TABLE
énoncé, mais la question explique déjà pourquoi cela est inadéquat pour une base de données spatiale.