เลเยอร์พื้นที่ (ตาราง) ใน SpatiaLite ประกอบด้วยวัตถุและเมตาดาต้าที่รองรับต่าง ๆ รวมถึงทริกเกอร์ดัชนีและรายการใน (อย่างน้อยที่สุด) ในgeometry_columns
ตาราง ฉันกำลังมองหา (ควร) GUI ที่จะจัดการกับการเปลี่ยนแปลงที่จำเป็นทั้งหมดในครั้งเดียวหรือ (ทางเลือก) เอกสารประกอบของการเปลี่ยนแปลงที่จำเป็นทั้งหมดเพื่อที่จะไม่ทำลายชั้นอวกาศ
ตารางมี:
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 คุณเพิ่งได้สตับของALTER TABLE
คำสั่งSQL นี่คือ SQL ที่ตรงไปตรงมาและทำได้น้อยกว่า QGIS DB Manager หากคุณกรอกชื่อตารางใหม่ตารางจะถูกเปลี่ยนชื่อ ผลกระทบอื่น ๆ :
- ตารางไม่ได้รับการเปลี่ยนชื่อ
geometry_columns.f_table_name
ซึ่งหมายความว่า GIS จำนวนมากจะไม่เห็นตารางเป็นเลเยอร์เชิงพื้นที่ - ห้ามเปลี่ยนชื่อทริกเกอร์ นิยามทริกเกอร์ที่มีการแก้ไขบางส่วนเพื่อให้
BEFORE [INSERT|UPDATE|DELETE]
หมายถึงชื่อตารางใหม่geometry_columns
แต่ยังคงสภาพการค้นหาสำหรับชื่อเก่า - ห้ามเปลี่ยนชื่อดัชนีเชิงพื้นที่ ไม่แน่ใจว่าสิ่งนี้สำคัญหรือไม่เพราะทริกเกอร์ยังคงอ้างถึงชื่อดัชนีเก่า
โปรดทราบว่า Spatialite-GUI ให้ตัวเลือกในการกู้คืนคอลัมน์รูปทรงเรขาคณิตซึ่งเพิ่มรายการที่ถูกต้องgeometry_columns
(แต่คุณต้องระบุ SRID, ประเภทรูปทรงเรขาคณิตและขนาด) เพื่อสร้างหรือสร้างดัชนีเชิงพื้นที่และกู้ทริกเกอร์ แต่ไม่มี ของฟังก์ชั่นเหล่านี้ลบแถวตารางทริกเกอร์หรือดัชนีเก่าที่นำไปสู่ DB ที่มี schmutz (อาจไม่เป็นอันตราย แต่น่ารำคาญ) จำนวนมากในนั้น