Las capas espaciales (tablas) en SpatiaLite incluyen varios objetos de apoyo y metadatos, incluidos desencadenantes, índices y entradas en (como mínimo) la geometry_columns
tabla. Estoy buscando (preferiblemente) una GUI que maneje todos los cambios necesarios de una vez, o la documentación (alternativa) de todos los cambios necesarios para no romper las capas espaciales.
Las tablas tienen:
- Entrada en
geometry_columns.f_table_name
. - Cinco disparadores nombrados
[prefix]_[table_name]_geometry
, donde el prefijo indica si se trata de una reversión de transacción o actualización de índice. - Tres índices espaciales llamados
idx_[table_name]_geometry[_suffix]
He intentado esto en dos aplicaciones, QGIS DB Manager y SpatiaLite-GUI.
QGIS DB Manager parece tener los siguientes efectos:
- Se actualiza correctamente
geometry_columns
con el nuevo nombre de la tabla - No cambia el nombre de los desencadenantes. La definición del disparador se modifica parcialmente, de modo que se
BEFORE [INSERT|UPDATE|DELETE]
refiere al nuevo nombre de la tabla, pero la condición aún busca el nombre antiguo engeometry_columns
. - No renombra los índices espaciales. No estoy seguro de si esto es importante porque los desencadenantes aún se refieren a nombres de índice antiguos.
Cuando elige Mantenimiento → Cambiar nombre de tabla en SpatiaLite-GUI, solo obtiene el código auxiliar de una ALTER TABLE
instrucción SQL . Este es un SQL sencillo y hace incluso menos que QGIS DB Manager. Si completa el nuevo nombre de la tabla, la tabla se renombra. Otros efectos:
- La tabla no se renombra
geometry_columns.f_table_name
, lo que significa que muchos SIG no verán la tabla como una capa espacial. - No cambia el nombre de los desencadenantes. La definición del disparador se modifica parcialmente, de modo que se
BEFORE [INSERT|UPDATE|DELETE]
refiere al nuevo nombre de la tabla, pero la condición aún busca el nombre antiguo engeometry_columns
. - No renombra los índices espaciales. No estoy seguro de si esto es importante porque los desencadenantes aún se refieren a nombres de índice antiguos.
Tenga en cuenta que Spatialite-GUI ofrece la opción de recuperar una columna de geometría que agrega la entrada correcta geometry_columns
(pero requiere que especifique SRID, tipo de geometría y dimensiones), para construir o reconstruir un índice espacial y para recuperar disparadores, pero ninguno De estas funciones, se eliminan las filas, los desencadenantes o los índices de la tabla anterior, lo que lleva a una base de datos con una gran cantidad de (posiblemente inofensivo pero molesto) schmutz.
fuente
Respuestas:
Debe copiar la tabla con un nuevo nombre de tabla y cambiar el nombre de las columnas cuando copie los datos. Una función de administrador de tabla sería ideal para esto, pero aún no se ha creado para la interfaz gráfica de usuario. El siguiente enlace muestra información formal para esto con código de muestra en SQLite. SpatiaLite es parte de SQLite, por lo que la codificación es la misma. ¡Buena suerte!
https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/
fuente
ALTER TABLE
declaración, pero la pregunta ya aborda por qué esto es inadecuado para una base de datos espacial.