เปลี่ยนชื่อตาราง postGIS และอัปเดต GeoServer หรือไม่


9

ฉันต้องการเปลี่ยนชื่อหนึ่งในตาราง postGIS ของฉัน อย่างไรก็ตามเมื่อฉันทำเช่นนี้โดยใช้ง่าย

ALTER TABLE old_name RENAME TO new_name;

ข้อมูลเชิงพื้นที่อย่างที่ฉันเข้าใจไม่มีการอัปเดตด้วยชื่อใหม่ ก่อนสามารถอ้างอิงเหล่านี้สามารถแก้ไขได้โดยการเรียกใช้ฟังก์ชัน:

SELECT probe_geometry_columns()

โต๊ะตัวเองตกลงหลังจากนี้หรือไม่ หรือควรใช้มาตรการอื่น ๆ ด้วย? ประการที่สองฉันจะอัปเดต GeoServer เพื่อให้พบตารางใหม่ได้อย่างไร ณ ตอนนี้ถ้าฉันใช้คำสั่งข้างต้นและแก้ไขข้อมูลเลเยอร์บน GeoServer ให้ชี้ไปที่ชื่อใหม่ ... ฉันยังคงได้รับข้อผิดพลาด (GeoServer ยังคงพยายามค้นหาภายใต้ชื่อเก่า) ตรงที่ชื่อเลเยอร์ควรเปลี่ยนใน GeoServer ที่ไหน?

คำตอบ:


4

ในการเปลี่ยนชื่อตารางคุณจะต้องเปลี่ยนชื่อในข้อมูลเมตาของสองแห่ง ก่อนอื่นใน PostGIS จากนั้นเลือก Geoserver

หากต้องการเปลี่ยน PostGIS คุณสามารถอัปเดต geometry_columns ได้โดยตรง แม้ว่า probe_geometries จะมีผลกระทบของการแทรกรายการนั้นลงในคอลัมน์รูปทรงเรขาคณิต แต่ก็จะมีผลของการอธิบายสคีมาของตารางทั้งหมดเป็นการแทรกรายการคอลัมน์รูปทรงเรขาคณิตที่ขาดหายไป หากคุณมีตารางจำนวนมากสิ่งนี้อาจมีราคาแพงดังนั้นทำไมไม่เพียงอัปเดตตาราง geometry_columns โดยตรง

สำหรับการอัพเดท geoserver คุณมีตัวเลือกมากมาย แน่นอนคุณสามารถทำได้ด้วยตนเองผ่าน GUI แต่ฉันรู้สึกว่าคุณต้องการทำให้เป็นอัตโนมัติ การเขียนเชลล์สคริปต์ที่แก้ไขไฟล์กำหนดค่าในโฟลเดอร์การติดตั้ง geoserver และรีสตาร์ท geoserver แต่นั่นก็เป็นวิธีที่ยาวในการทำสิ่งต่าง ๆ ฉันจะแนะนำให้คุณใช้การตั้งค่า API geoserver REST ซึ่งช่วยให้คุณจัดการกับการกำหนดค่าผ่านชั้นโทรสงบ

ปรับปรุง:

ในกรณีที่ "คอลัมน์รูปทรงเรขาคณิตที่อัปเดต" ไม่ชัดเจนให้ทำดังนี้:

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

อัปเดต 8 ปี (!!!) ในภายหลัง (2018):

เช่นเดียวกับบางคนที่กล่าวถึงด้านล่างหลังจาก PostGIS 2.0 ตารางข้อมูลเมตาจะได้รับการอัปเดตโดยอัตโนมัติหลังจากคำสั่ง ALTER


ให้อภัยความเขลาของฉัน แต่เป็นเพราะฉันใหม่กับ PostGIS ฉันจะอัปเดต geometry_column ได้อย่างไร ฉันเข้าใจคุณถูกต้องหรือไม่ว่าการเรียกใช้ฟังก์ชัน probe_ (ไม่มีพารามิเตอร์ใด ๆ ) จะทำสิ่งเดียวกันหรือไม่
Mimo

1
ดูการใช้งานจาก probe_geometry_columns trac.osgeo.org/postgis/changeset/7548มันจะผ่านทุกตารางเดียวใน db ค้นหาว่า schema มีสตริง "geometrytype" และแทรกบันทึกใหม่หากไม่มีรายการที่ต้องการ ใน geometry_columns อย่างไรก็ตามบันทึกเด็กกำพร้าถูกทิ้งไว้ตามที่เป็น ดังนั้นทำไมไม่เพียงทำ: อัพเดทเรขาคณิต geometry_columns SET f_table_name = 'new_table_name' โดยที่ f_table_name = 'old_table_name'
Ragi Yaser Burhum

การแสดงนี้Not Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche

คุณต้องการดูข้อมูลในตอนนี้: docs.geoserver.org/stable/en/user/rest/api/index.html
Ragi Yaser Burhum

7

โปรดทราบว่าใน PostGIS 2.0+ สิ่งที่คุณต้องทำคือสิ่งปกติ

ALTER TABLE old_name RENAME TO new_name;

รายการในมุมมอง geometry_columns (หรือ geography_columns) จะได้รับการอัปเดตด้วย


3
SELECT Probe_Geometry_Columns();

เป็นเครื่องมือที่มีประโยชน์

ก่อนอื่นเมื่อเราผนวกคอลัมน์รูปทรงเรขาคณิตลงในตารางที่มีอยู่ด้วย

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

เรากำลังป้อนฟังก์ชั่นทุกอย่างที่จำเป็นเพื่อตรึงคอลัมน์ประเภทเรขาคณิต (geo_column) ลงในตารางที่ระบุ (my_table) และเขียนรายละเอียดที่สำคัญเช่น SRID (1234) ประเภทเรขาคณิต (MULTIPOINT) และจำนวนมิติ (2) ถึง ตาราง geometry_columns ในสาระสำคัญมันคือการเปลี่ยนแปลงและสามปรับปรุง

การสร้างคอลัมน์รูปทรงเรขาคณิตด้วยวิธีอื่น ๆ (โหลดจาก shapefile ที่เลือกใน CREATE TABLE AS และอื่น ๆ ) สามารถนำไปสู่ตารางเชิงพื้นที่ที่มองไม่เห็นจากแอปพลิเคชันภายนอกแม้ว่ามันจะทำงานได้ดีภายในฐานข้อมูล หากไม่มีรายละเอียดที่ถูกต้องถูกเก็บไว้ใน geometry_columns ค่ารูปทรงเรขาคณิตที่แท้จริงจะปรากฏเป็นสตริงอักขระที่ไม่เกี่ยวกับตัวอักษรสำหรับแอปพลิเคชันที่มองหาจุดเส้นหรือรูปหลายเหลี่ยมที่คาดการณ์ไว้

การเรียกใช้ฟังก์ชันโพรบตรวจสอบคอลัมน์ประเภทเรขาคณิตแต่ละคอลัมน์เพิ่มค่าใหม่ให้กับรูปเรขาคณิต _ คอลัมน์และความขัดแย้งในการรายงาน

วนกลับไปที่คำถามของคุณ GeoServer ไม่เชื่อว่าตารางที่เปลี่ยนชื่อนั้นมีข้อมูลเชิงพื้นที่หากการเปลี่ยนชื่อไม่ปรากฏในรูปเรขาคณิต geol_columns สิ่งอื่นที่ควรพิจารณาคือฟังก์ชันโพรบสร้างระเบียนที่ซ้ำกันซึ่งสะท้อนชื่อตารางใหม่ แต่ไม่ได้ลบเรกคอร์ดดั้งเดิม - ซึ่งอาจเป็นอีกการแฮงเอาท์สำหรับ GeoServer

ทั้งหมดที่กล่าวมาฉันขอแนะนำให้คุณ: 1) เรียกใช้โพรบแล้วลบระเบียนเก่าทันที หรือ 2) ติดตามการเปลี่ยนชื่อของคุณด้วย ALTER บน geometry_columns เพื่อเปลี่ยนค่า f_table_name

ขออภัยสำหรับ wordiness แต่ฉันหวังว่ามันจะช่วย


ขอบคุณสำหรับการตอบกลับของคุณ. ตอนนี้ฉันเริ่มเข้าใจ postGIS ดีขึ้นแล้ว ถึงกระนั้นฉันก็ยังไม่แน่ใจในขั้นตอนที่จำเป็นที่ต้องดำเนินการ ฉันควรก่อนอื่นทำการเปลี่ยนชื่อแล้วโพรบ ()? ฉันจะเปลี่ยนรูปเรขาคณิตได้อย่างไร
Mimo

วิธีที่ง่ายที่สุดในการเปลี่ยนแปลงใน geometry_columns คือการเปิด pgAdmin คลิกขวาที่ตารางเลือกข้อมูลดูเลือกดูทุกแถวคลิกในเซลล์ที่มีชื่อตารางเก่าและพิมพ์ชื่อตารางใหม่ หรืออัปเดต geometry_columns ชุด f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' และ f_table_name = 'old_table_name'
rec.thegeom

1

ฉันไม่แน่ใจว่า SELECT probe_geometry_columns () ทำอะไร แต่คุณสามารถตรวจสอบตาราง geometry_columns เพื่อดูว่าชื่อตารางใหม่ของคุณอยู่ในนั้นหรือยังชี้ไปที่ชื่อเก่า

ฉันสงสัยว่าคุณต้องโหลดที่เก็บ GeoServer อีกครั้งเพื่อให้แน่ใจว่า "สังเกตเห็น" การเปลี่ยนแปลง อีกทางหนึ่งการหยุดและเริ่มจะทำ


คุณหมายถึงอะไรโดย "โหลดที่เก็บ GeoServer ใหม่"
Mimo

บนหน้าสถานะ ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) มีปุ่มโหลดซ้ำ
Ian Turton

ขอบคุณ อย่างไรก็ตามการโหลดซ้ำไม่ทำงาน ฉันยังคงได้รับข้อผิดพลาด GeoServer ซึ่งบ่นว่าไม่ได้หาเลเยอร์ที่เปลี่ยนชื่อ มันยังคงพยายามค้นหาภายใต้ชื่อเก่า
Mimo

คุณเปลี่ยนคำจำกัดความเลเยอร์เพื่อชี้ไปที่ชื่อตารางใหม่หรือไม่?
Ian Turton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.