Ganti nama tabel postGIS dan memperbarui GeoServer?

9

Saya ingin mengganti nama salah satu tabel postGIS saya. Namun, ketika saya melakukan ini dengan menerapkan yang sederhana

ALTER TABLE old_name RENAME TO new_name;

Data spasial, seperti yang saya mengerti, tidak diperbarui dengan nama baru. Pertama, bisakah referensi ini diperbaiki dengan menjalankan fungsi:

SELECT probe_geometry_columns()

Apakah tabel itu sendiri tidak masalah setelah ini? Atau haruskah langkah-langkah lain diambil juga? Kedua, bagaimana saya memperbarui GeoServer sehingga menemukan tabel baru ini? Sampai sekarang, jika saya menjalankan perintah di atas, dan mengedit info lapisan pada GeoServer untuk menunjuk ke nama baru ... Saya masih mendapatkan kesalahan (GeoServer masih mencoba menemukannya di bawah nama lama). Tepatnya, di mana seharusnya nama layer diubah pada GeoServer?

Mimo
sumber

Jawaban:

4

Untuk mengganti nama tabel, Anda harus mengubah nama dalam metadata dari dua tempat. Pertama pada PostGIS, kemudian pada konfigurasi Geoserver.

Untuk mengubah yang PostGIS, Anda dapat memperbarui geometry_columns secara langsung. Meskipun probe_geometries akan memiliki efek memasukkan entri itu ke dalam kolom geometri, itu juga akan memiliki efek DESCRIBING skema semua tabel dan memasukkan entri kolom geometri yang hilang. Jika Anda memiliki banyak tabel, ini bisa menjadi mahal, jadi mengapa tidak langsung memperbarui tabel geometry_columns?

Untuk memperbarui geoserver Anda memiliki berbagai opsi. Tentu saja Anda dapat melakukannya secara manual melalui GUI, tetapi saya merasa Anda ingin mengotomatiskannya. Menulis skrip shell yang mengedit file-file konfigurasi di folder instalasi geoserver dan memulai kembali geoserver, tetapi itu juga merupakan jalan panjang dalam melakukan sesuatu. Saya akan merekomendasikan Anda menggunakan geoserver REST config API yang memungkinkan Anda untuk memanipulasi konfigurasi layer melalui panggilan RESTful .

Memperbarui:

Jika "perbarui kolom geometri" tidak jelas lakukan hal berikut:

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

Perbarui 8 tahun (!!!) kemudian (2018):

Seperti beberapa orang yang disebutkan di bawah ini, setelah PostGIS 2.0, tabel metadata diperbarui secara otomatis setelah pernyataan ALTER.

Ragi Yaser Burhum
sumber
Maafkan ketidaktahuan saya, tetapi karena saya sangat baru untuk PostGIS. Bagaimana tepatnya cara saya memperbarui geometry_columns? Apakah saya mengerti Anda benar bahwa menjalankan fungsi probe_ (tanpa parameter apa pun) melakukan hal yang sama?
Mimo
1
Lihatlah implementasinya dari probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Ini akan melalui setiap tabel tunggal dalam db, menemukan apakah skema memiliki string "geometrytype" dan memasukkan catatan baru jika entri yang diperlukan tidak ada dalam geometry_columns. Namun demikian, catatan anak yatim dibiarkan apa adanya. Jadi mengapa tidak lakukan saja: PEMBARUAN geometri_koleksi SET f_table_name = 'new_table_name' di mana f_table_name = 'old_table_name'
Ragi Yaser Burhum
ini menunjukkanNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche
Anda ingin melihatnya sekarang: docs.geoserver.org/stable/en/user/rest/api/index.html
Ragi Yaser Burhum
7

Perhatikan bahwa di PostGIS 2.0+, yang harus Anda lakukan adalah normal

ALTER TABLE old_name RENAME TO new_name;

Entri dalam tampilan geometry_columns (atau geography_columns) juga akan diperbarui.

Shane
sumber
3
SELECT Probe_Geometry_Columns();

adalah utilitas praktis.

Pertama, ketika kita menambahkan kolom geometri ke tabel yang ada dengan

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

kita memberi makan fungsi semua yang diperlukan untuk menempelkan kolom tipe geometri (geo_column) ke tabel yang ditentukan (my_table) dan menulis detail penting seperti SRID (1234), tipe geometri (MULTIPOINT) dan jumlah dimensi (2) untuk tabel geometry_columns. Intinya, ini adalah ALTER dan tiga PEMBARUAN.

Membuat kolom geometri dengan cara lain (diambil dari shapefile, dipilih dalam CREATE TABLE AS, dll.) Dapat mengarah ke tabel spasial yang tidak terlihat oleh aplikasi eksternal, meskipun mereka bekerja dengan baik dalam database. Tanpa detail yang tepat disimpan dalam geometry_columns, nilai-nilai geometri aktual muncul sebagai string karakter yang tidak masuk akal untuk aplikasi yang mencari titik, garis, atau poligon yang diproyeksikan.

Memanggil fungsi probe memeriksa setiap kolom dari tipe geometri, menambahkan nilai baru ke geometry_columns dan melaporkan konflik.

Berputar kembali ke pertanyaan Anda, GeoServer tidak percaya tabel berganti nama berisi data spasial jika perubahan nama tidak tercermin dalam geometry_columns. Hal lain yang perlu dipertimbangkan adalah bahwa fungsi probe membuat catatan duplikat yang mencerminkan nama tabel baru tetapi tidak menghilangkan catatan asli - potensi lain untuk GeoServer.

Semua yang mengatakan, saya akan menyarankan Anda: 1) jalankan probe kemudian segera hapus catatan lama; atau 2) ikuti perubahan nama Anda dengan ALTER di geometry_columns untuk mengubah nilai f_table_name.

Maaf atas kata-katanya, tapi saya harap ini membantu.

rec.thegeom
sumber
Terimakasih atas balasan anda. Saya mulai mengerti postGIS lebih baik sekarang. Namun, saya agak tidak yakin dengan langkah-langkah yang perlu diambil. Haruskah saya pertama-tama melakukan perubahan nama, lalu probe ()? Bagaimana cara mengubah geometry_columns?
Mimo
Cara paling sederhana untuk melakukan perubahan pada geometry_columns adalah dengan membuka pgAdmin, klik kanan tabel, pilih tampilan data, pilih lihat semua baris, klik di sel yang berisi nama tabel lama dan ketik nama tabel baru. atau, PEMBARUAN geometri_kolom SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' AND f_table_name = 'old_table_name'
rec.thegeom
1

Saya tidak yakin apa yang dilakukan SELECT probe_geometry_columns (), tetapi Anda dapat dengan mudah memeriksa tabel geometry_columns untuk melihat apakah nama tabel baru Anda ada di sana atau apakah masih menunjuk ke yang lama.

Saya menduga Anda perlu memuat ulang toko GeoServer untuk memastikannya "memperhatikan" perubahan. Atau berhenti dan mulai akan melakukannya.

Ian Turton
sumber
Apa yang Anda maksud dengan "memuat ulang toko GeoServer"?
Mimo
Pada halaman status ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) ada tombol muat ulang.
Ian Turton
Terima kasih. Namun, memuat ulang tidak berhasil. Saya masih mendapatkan kesalahan GeoServer yang mengeluhkan tidak menemukan lapisan yang diubah namanya. Masih mencoba menemukannya dengan nama lama.
Mimo
Anda mengubah definisi layer untuk menunjuk ke nama tabel baru?
Ian Turton