Làm cách nào để đổi tên bảng trong SpatiaLite DB đúng cách?


11

Các lớp không gian (bảng) trong SpatiaLite bao gồm các đối tượng và siêu dữ liệu hỗ trợ khác nhau, bao gồm các trình kích hoạt, chỉ mục và các mục trong (tối thiểu) geometry_columnsbảng. Tôi đang tìm kiếm (tốt nhất) một GUI sẽ xử lý tất cả các thay đổi cần thiết trong một lần hoặc tài liệu (dự phòng) về tất cả các thay đổi cần thiết để không phá vỡ các lớp không gian.

Bàn có:

  1. Nhập cảnh vào geometry_columns.f_table_name.
  2. Năm kích hoạt được đặt tên [prefix]_[table_name]_geometry, trong đó tiền tố cho biết liệu đó là một giao dịch khôi phục hoặc cập nhật chỉ mục.
  3. Ba chỉ số không gian được đặt tên idx_[table_name]_geometry[_suffix]

Tôi đã thử điều này trong hai ứng dụng, Trình quản lý DB QGIS và SpatiaLite-GUI.

Trình quản lý DBISIS xuất hiện có các hiệu ứng sau:

  1. Cập nhật chính xác geometry_columnsvới tên bảng mới
  2. Không đổi tên kích hoạt. Định nghĩa kích hoạt được sửa đổi một phần BEFORE [INSERT|UPDATE|DELETE]để tham chiếu đến tên bảng mới, nhưng điều kiện vẫn tìm kiếm tên cũ trong geometry_columns.
  3. Không đổi tên các chỉ số không gian. Không chắc chắn nếu điều này quan trọng bởi vì kích hoạt vẫn đề cập đến tên chỉ mục cũ.

Khi bạn chọn Bảo trì → Đổi tên bảng trong SpatiaLite-GUI, bạn chỉ cần lấy sơ khai của câu lệnh SQL ALTER TABLE. Đây là SQL đơn giản và thậm chí còn ít hơn Trình quản lý DBISIS. Nếu bạn điền tên bảng mới, bảng sẽ được đổi tên. Tác dụng khác:

  1. Bảng không được đổi tên geometry_columns.f_table_name, điều đó có nghĩa là nhiều GIS sẽ không xem bảng là một lớp không gian.
  2. Không đổi tên kích hoạt. Định nghĩa kích hoạt được sửa đổi một phần BEFORE [INSERT|UPDATE|DELETE]để tham chiếu đến tên bảng mới, nhưng điều kiện vẫn tìm kiếm tên cũ trong geometry_columns.
  3. Không đổi tên các chỉ số không gian. Không chắc chắn nếu điều này quan trọng bởi vì kích hoạt vẫn đề cập đến tên chỉ mục cũ.

Lưu ý rằng Spatialite-GUI cung cấp tùy chọn khôi phục cột hình học có thêm mục nhập chính xác geometry_columns(nhưng yêu cầu bạn chỉ định SRID, loại hình học và kích thước), để xây dựng hoặc xây dựng lại chỉ mục không gian và để khôi phục trình kích hoạt, nhưng không có trong số các hàm này sẽ loại bỏ các hàng, bảng kích hoạt hoặc chỉ mục cũ, dẫn đến một DB có rất nhiều schmutz (có thể vô hại nhưng gây khó chịu) trong đó.


3
Tôi nghĩ rằng cần có một "Trình quản lý bảng" để sắp xếp lại, đổi tên, xóa các trường vv trong SpatiaLite nếu chúng ta muốn loại bỏ các tệp hình dạng. Nhưng, không rõ lý do, không có công cụ nào có thể giúp chúng tôi với điều đó, theo như tôi biết. Có thể là một dự án tốt cho một sáng kiến ​​tài trợ đám đông!
Bernd V.

Phiên bản nào của spatialite-gui bạn có?
dùng49584

SpatiaLite-GUI 1.7.1.
Lee Hachadoorian

Câu trả lời:


2

Bạn cần sao chép bảng với tên bảng mới và đổi tên các cột khi bạn sao chép dữ liệu. Một chức năng quản lý bảng sẽ là lý tưởng cho việc này nhưng chưa được tạo cho gui. Liên kết dưới đây cho thấy một số thông tin chính thức cho điều này với mã mẫu trong SQLite. SpatiaLite là một phần của SQLite nên mã hóa là như nhau. Chúc may mắn!

https://blog.xojo.com/2013/12/04/renaming-columns-in-sqlite-tables/


Lưu ý rằng câu hỏi là về việc đổi tên bảng , không phải cột . Trang được liên kết thảo luận về ALTER TABLEtuyên bố, nhưng câu hỏi đã giải quyết tại sao điều này không phù hợp với cơ sở dữ liệu không gian.
Lee Hachadoorian

Sau khi xem xét điều này hơn nữa với nhận xét của bạn trong tâm trí, tôi không nghĩ rằng có một cách thích hợp để làm điều này và duy trì các kích hoạt và các thành phần cấu trúc khác. Có vẻ như bạn sẽ cần phải viết lại mã hoặc khi bạn đi xuất bảng (nếu bạn dự định làm như vậy), hãy sử dụng một tên khác trong trình quản lý db trong QGIS.
Julia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.