Lapisan spasial (tabel) di SpatiaLite mencakup berbagai objek dan metadata pendukung, termasuk pemicu, indeks, dan entri dalam (minimal) geometry_columns
tabel. Saya mencari (lebih disukai) GUI yang akan menangani semua perubahan yang diperlukan dalam sekali jalan, atau (fallback) dokumentasi semua perubahan yang diperlukan agar tidak merusak lapisan spasial.
Tabel memiliki:
- Masuk
geometry_columns.f_table_name
. - Lima pemicu bernama
[prefix]_[table_name]_geometry
, di mana awalan menunjukkan apakah itu kembalikan transaksi atau pembaruan indeks. - Tiga indeks spasial bernama
idx_[table_name]_geometry[_suffix]
Saya telah mencoba ini dalam dua aplikasi, QGIS DB Manager dan SpatiaLite-GUI.
QGIS DB Manager tampaknya memiliki efek berikut:
- Pembaruan yang benar
geometry_columns
dengan nama tabel baru - Tidak mengganti nama pemicu. Definisi pemicu sebagian dimodifikasi sehingga
BEFORE [INSERT|UPDATE|DELETE]
merujuk ke nama tabel baru, tetapi kondisi masih mencari nama lama digeometry_columns
. - Tidak mengganti nama indeks spasial. Tidak yakin apakah ini penting karena pemicu masih merujuk pada nama indeks yang lama.
Ketika Anda memilih Maintenance → Ganti nama tabel di SpatiaLite-GUI, Anda hanya mendapatkan tulisan SQL ALTER TABLE
. Ini adalah SQL langsung dan bahkan kurang dari QGIS DB Manager. Jika Anda mengisi nama tabel baru, tabel akan diganti namanya. Efek lain:
- Tabel tidak tidak bisa diganti di
geometry_columns.f_table_name
, yang berarti banyak GISes tidak akan melihat tabel sebagai lapisan spasial. - Tidak mengganti nama pemicu. Definisi pemicu sebagian dimodifikasi sehingga
BEFORE [INSERT|UPDATE|DELETE]
merujuk ke nama tabel baru, tetapi kondisi masih mencari nama lama digeometry_columns
. - Tidak mengganti nama indeks spasial. Tidak yakin apakah ini penting karena pemicu masih merujuk pada nama indeks yang lama.
Perhatikan bahwa Spatialite-GUI memang memberikan opsi untuk memulihkan kolom geometri yang menambahkan entri yang benar ke geometry_columns
(tetapi mengharuskan Anda untuk menentukan SRID, tipe geometri, dan dimensi), untuk membangun atau membangun kembali indeks spasial, dan untuk memulihkan pemicu, tetapi tidak ada dari fungsi-fungsi ini menghapus baris tabel tua, pemicu, atau indeks, yang mengarah ke DB dengan banyak schmutz (mungkin tidak berbahaya tapi menjengkelkan) di dalamnya.
sumber
Jawaban:
Anda perlu menyalin tabel dengan nama tabel baru dan mengganti nama kolom saat Anda menyalin data. Fungsi table manager akan ideal untuk ini tetapi belum dibuat untuk gui. Tautan di bawah ini menunjukkan beberapa informasi formal untuk ini dengan kode sampel dalam SQLite. SpatiaLite adalah bagian dari SQLite sehingga pengkodeannya sama. Semoga berhasil!
https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/
sumber
ALTER TABLE
pernyataan itu, tetapi pertanyaannya sudah membahas mengapa ini tidak memadai untuk database spasial.