Просторові шари (таблиці) в SpatiaLite включають різні підтримуючі об'єкти та метадані, включаючи тригери, індекси та записи в (як мінімум) geometry_columns
таблиці. Я шукаю (бажано) графічний інтерфейс, який би обробляв усі необхідні зміни за один раз, або (резервну) документацію всіх необхідних змін, щоб не порушити просторові шари.
Столи мають:
- Вхід в
geometry_columns.f_table_name
. - П'ять іменників
[prefix]_[table_name]_geometry
, де префікс вказує, чи це відкат транзакцій чи оновлення індексу. - Три просторові індекси названі
idx_[table_name]_geometry[_suffix]
Я спробував це у двох додатках, QGIS DB Manager та SpatiaLite-GUI.
Здається, що QGIS DB Manager має такі ефекти:
- Правильно оновлення
geometry_columns
нового імені таблиці - Не перейменовує тригери. Визначення тригера частково модифіковане так, що
BEFORE [INSERT|UPDATE|DELETE]
посилається на нову назву таблиці, але умова все ще шукає старе ім'я вgeometry_columns
. - Не перейменовує просторові індекси. Не впевнений, що це має значення, оскільки тригери все ще посилаються на старі іменні індекси.
Коли ви вибираєте Технічне обслуговування → Перейменувати таблицю в SpatiaLite-GUI, ви просто отримаєте заглушку оператора SQL ALTER TABLE
. Це просто SQL і робить навіть менше, ніж QGIS DB Manager. Якщо ви заповнили нову назву таблиці, таблиця буде перейменована. Інші ефекти:
- Таблиця не перейменовується
geometry_columns.f_table_name
, що означає, що багато ГІС не бачать таблицю як просторовий шар. - Не перейменовує тригери. Визначення тригера частково модифіковане так, що
BEFORE [INSERT|UPDATE|DELETE]
посилається на нову назву таблиці, але умова все ще шукає старе ім'я вgeometry_columns
. - Не перейменовує просторові індекси. Не впевнений, що це має значення, оскільки тригери все ще посилаються на старі іменні індекси.
Зауважте, що Spatialite-GUI дає можливість відновити стовпчик геометрії, який додає правильний запис geometry_columns
(але вимагає вказати SRID, тип геометрії та розміри), створити або відновити просторовий індекс та відновити тригери, але жоден з цих функцій видаляють старі рядки таблиці, тригери чи індекси, що призводить до створення БД з великою кількістю (можливо, нешкідливою, але дратівливою) schmutz.