Đổi tên bảng postGIS và cập nhật GeoServer?


9

Tôi muốn đổi tên một trong các bảng postGIS của mình. Tuy nhiên, khi tôi làm điều này bằng cách áp dụng một cách đơn giản

ALTER TABLE old_name RENAME TO new_name;

Dữ liệu không gian, theo tôi hiểu, không được cập nhật với tên mới. Đầu tiên, các tham chiếu này có thể được sửa bằng cách chạy hàm:

SELECT probe_geometry_columns()

Bảng có ổn không sau này? Hoặc các biện pháp khác cũng nên được thực hiện? Thứ hai, làm cách nào để cập nhật GeoServer để nó tìm thấy bảng mới này? Đến bây giờ, nếu tôi chạy các lệnh trên chỉnh sửa thông tin lớp trên GeoServer để trỏ đến tên mới ... Tôi vẫn gặp lỗi (GeoServer vẫn cố gắng tìm nó dưới tên cũ). Chính xác, tên lớp nên được thay đổi ở đâu trên GeoServer?

Câu trả lời:


4

Để đổi tên bảng, bạn sẽ phải thay đổi tên trong siêu dữ liệu của hai nơi. Đầu tiên trên PostGIS, sau đó trên cấu hình Geoserver.

Để thay đổi PostGIS, bạn có thể cập nhật trực tiếp các hình học_column. Mặc dù thăm dò_geometries sẽ có tác dụng chèn mục nhập đó vào các cột hình học, nhưng nó cũng sẽ có tác dụng MÔ TẢ lược đồ của tất cả các bảng để chèn bất kỳ mục nhập cột hình học nào bị thiếu. Nếu bạn có nhiều bảng thì điều này có thể trở nên đắt đỏ, vậy tại sao bạn không cập nhật trực tiếp bảng hình học_columns?

Để cập nhật máy chủ địa lý, bạn có nhiều tùy chọn khác nhau. Chắc chắn bạn có thể làm điều đó bằng tay thông qua GUI, nhưng tôi có cảm giác bạn muốn tự động hóa nó. Viết một tập lệnh shell chỉnh sửa các tệp cấu hình trong thư mục cài đặt máy chủ địa lý và khởi động lại máy chủ địa lý, nhưng đó cũng là cách dài để thực hiện. Tôi khuyên bạn nên sử dụng API cấu hình REST của máy chủ địa lý cho phép bạn thao tác các cấu hình lớp thông qua các cuộc gọi RESTful .

Cập nhật:

Trong trường hợp "cột hình học cập nhật" không rõ ràng, hãy làm như sau:

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

Cập nhật 8 năm (!!!) sau (2018):

Giống như một số người được đề cập dưới đây, sau PostGIS 2.0, các bảng siêu dữ liệu được cập nhật tự động sau câu lệnh ALTER.


Xin tha thứ cho sự thiếu hiểu biết của tôi, nhưng vì tôi rất mới với PostGIS. Làm thế nào chính xác để tôi cập nhật hình học_columns? Tôi có hiểu bạn đúng không khi chạy hàm thăm dò (không có bất kỳ tham số nào) làm điều tương tự?
Mimo

1
Nhìn vào thực hiện từ probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Nó đang trải qua mỗi bảng duy nhất trong db, việc tìm kiếm nếu schema có chuỗi "GeometryType" và chèn một kỷ lục mới nếu mục yêu cầu không tồn tại trong hình học_columns. Tuy nhiên, hồ sơ mồ côi được để lại như họ đang có. Vì vậy, tại sao không chỉ làm: geometry_columns UPDATE SET f_table_name = 'new_table_name' nơi f_table_name = 'old_table_name'
Ragi Yaser Burhum

chương trình nàyNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche

bạn muốn xem xét điều này ngay bây giờ: docs.geoserver.org/ sóng / en / user / rest / api / index.html
Ragi Yaser Burhum

7

Lưu ý rằng trong PostGIS 2.0+, tất cả những gì bạn phải làm là bình thường

ALTER TABLE old_name RENAME TO new_name;

Mục nhập trong chế độ xem hình học_columns (hoặc geography_columns) cũng sẽ được cập nhật.


3
SELECT Probe_Geometry_Columns();

là một tiện ích tiện dụng.

Đầu tiên, khi chúng ta nối một cột hình học vào một bảng hiện có với

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

chúng tôi đang cung cấp cho hàm mọi thứ cần thiết để giải quyết cột hình học loại (Geo_column) vào bảng đã chỉ định (my_table) và viết các chi tiết quan trọng như SRID (1234), loại hình học (MULTIPOINT) và số lượng kích thước (2) cho bảng hình học_columns. Về bản chất, nó là một THAY ĐỔI và ba CẬP NHẬT.

Tạo các cột hình học bằng các phương tiện khác (được tải từ shapefile, được chọn trong CREATE TABLE AS, v.v.) có thể dẫn đến các bảng không gian vô hình với các ứng dụng bên ngoài, mặc dù chúng chỉ hoạt động tốt trong cơ sở dữ liệu. Không có các chi tiết phù hợp được lưu trữ trong hình học_column, các giá trị hình học thực tế xuất hiện dưới dạng các chuỗi ký tự vô nghĩa cho các ứng dụng đang tìm kiếm các điểm, đường hoặc đa giác được chiếu.

Gọi hàm thăm dò sẽ kiểm tra từng cột của loại hình học, thêm các giá trị mới vào hình học_column và xung đột báo cáo.

Xoay quanh câu hỏi của bạn, GeoServer không tin rằng bảng được đổi tên chứa dữ liệu không gian nếu thay đổi tên không được phản ánh trong hình học_columns. Một điều khác cần xem xét là chức năng thăm dò tạo một bản ghi trùng lặp phản ánh tên bảng mới nhưng không thoát khỏi bản ghi gốc - một cúp máy tiềm năng khác cho GeoServer.

Tất cả những gì đã nói, tôi sẽ đề nghị bạn: 1) chạy thăm dò sau đó xóa ngay bản ghi cũ; hoặc 2) theo dõi thay đổi tên của bạn bằng ALTER trên hình học_column để thay đổi giá trị f_table_name.

Xin lỗi vì sự dài dòng, nhưng tôi hy vọng nó có ích.


Cảm ơn bạn đã trả lời của bạn. Tôi đang bắt đầu hiểu postGIS tốt hơn bây giờ. Tuy nhiên, tôi không chắc chắn về các bước cần thiết cần phải thực hiện. Trước hết tôi có nên thực hiện thay đổi tên, sau đó là đầu dò () không? Làm cách nào để thay đổi hình học_columns?
Mimo

Cách đơn giản nhất để thực hiện thay đổi trong hình học_columns là mở pgAdmin, nhấp chuột phải vào bảng, chọn xem dữ liệu, chọn xem tất cả các hàng, nhấp vào ô chứa tên bảng cũ và nhập tên bảng mới. hoặc, geometry_columns UPDATE SET f_table_name = 'new_table_name' WHERE f_schema_name = 'tên_sơ đồ' VÀ f_table_name = 'old_table_name'
rec.thegeom

1

Tôi không chắc chắn những gì SELECT thăm dò_geometry_columns () làm, nhưng bạn có thể dễ dàng kiểm tra bảng hình học_columns để xem tên bảng mới của bạn có ở đó không hoặc nếu nó vẫn còn trỏ đến bảng cũ.

Tôi nghi ngờ rằng bạn cần tải lại cửa hàng GeoServer để đảm bảo nó "thông báo" các thay đổi. Hoặc là dừng lại và bắt đầu sẽ làm điều đó.


Bạn có ý nghĩa gì khi "tải lại cửa hàng GeoServer"?
Mimo

Trên trang trạng thái ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) có nút tải lại.
Ian Turton

Cảm ơn. Tuy nhiên, tải lại không hoạt động. Tôi vẫn gặp lỗi GeoServer phàn nàn về việc không tìm thấy lớp được đổi tên. Nó vẫn cố gắng tìm nó dưới cái tên cũ.
Mimo

bạn đã thay đổi định nghĩa lớp để trỏ đến tên bảng mới?
Ian Turton
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.