PostGIS-Tabelle umbenennen und GeoServer aktualisieren?

9

Ich möchte eine meiner postGIS-Tabellen umbenennen. Wenn ich dies jedoch durch Anwenden eines einfachen

ALTER TABLE old_name RENAME TO new_name;

Die räumlichen Daten werden meines Wissens nicht mit dem neuen Namen aktualisiert. Erstens können diese Referenzen durch Ausführen der Funktion behoben werden:

SELECT probe_geometry_columns()

Ist der Tisch danach in Ordnung? Oder sollten auch andere Maßnahmen ergriffen werden? Zweitens, wie aktualisiere ich GeoServer, damit es diese neue Tabelle findet? Wenn ich jetzt die obigen Befehle ausführe und die Ebeneninformationen auf dem GeoServer so bearbeite, dass sie auf den neuen Namen verweisen ... wird immer noch eine Fehlermeldung angezeigt (GeoServer versucht immer noch, ihn unter dem alten Namen zu finden). Wo genau soll der Layername auf dem GeoServer geändert werden?

Mimo
quelle

Antworten:

4

Um die Tabelle umzubenennen, müssen Sie den Namen in den Metadaten von zwei Stellen ändern. Zuerst in PostGIS, dann in der Geoserver-Konfiguration.

Um das PostGIS zu ändern, können Sie die geometrischen Spalten direkt aktualisieren. Obwohl probe_geometries den Effekt hat, diesen Eintrag in Geometriespalten einzufügen, hat es auch den Effekt, das Schema aller Tabellen zu BESCHREIBEN und fehlende Geometriespalteneinträge einzufügen. Wenn Sie viele Tabellen haben, kann dies teuer werden. Warum also nicht einfach die Tabelleometry_columns direkt aktualisieren?

Zum Aktualisieren des Geoservers stehen Ihnen verschiedene Optionen zur Verfügung. Natürlich können Sie dies manuell über die GUI tun, aber ich habe das Gefühl, Sie möchten es automatisieren. Das Schreiben eines Shell-Skripts, mit dem die Konfigurationsdateien im Geoserver-Installationsordner bearbeitet und der Geoserver neu gestartet wird, ist jedoch auch der lange Weg. Ich würde empfehlen, dass Sie die Geoserver-REST-Konfigurations-API verwenden, mit der Sie die Layer-Konfigurationen über RESTful-Aufrufe bearbeiten können .

Aktualisieren:

Falls die "Geometriespalten aktualisieren" nicht offensichtlich ist, gehen Sie wie folgt vor:

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

Update 8 Jahre (!!!) später (2018):

Wie einige der unten genannten Personen werden die Metadatentabellen nach PostGIS 2.0 nach der ALTER-Anweisung automatisch aktualisiert.

Ragi Yaser Burhum
quelle
Verzeihen Sie meine Unwissenheit, aber ich bin sehr neu in PostGIS. Wie genau aktualisiere ich geometrische Spalten? Habe ich Sie richtig verstanden, dass das Ausführen der Funktion probe_ (ohne Parameter) dasselbe bewirkt?
Mimo
1
Schauen Sie sich die Implementierung von probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 an. Sie durchläuft jede einzelne Tabelle in der Datenbank, ermittelt, ob das Schema die Zeichenfolge "Geometrietyp" enthält, und fügt einen neuen Datensatz ein, wenn der erforderliche Eintrag nicht vorhanden ist in geometrischen Spalten. Trotzdem bleiben verwaiste Datensätze unverändert. Warum also nicht einfach Folgendes tun: UPDATE geometrische Spalten SET f_table_name = 'new_table_name' wobei f_table_name = 'old_table_name'
Ragi Yaser Burhum
Dies zeigtNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche
Sie möchten dies jetzt ansehen
Ragi Yaser Burhum
7

Beachten Sie, dass Sie in PostGIS 2.0+ nur das Normale tun müssen

ALTER TABLE old_name RENAME TO new_name;

Der Eintrag in der Ansicht geometr_columns (oder geography_columns) wird ebenfalls aktualisiert.

Shane
quelle
3
SELECT Probe_Geometry_Columns();

ist ein praktisches Dienstprogramm.

Erstens, wenn wir eine Geometriespalte an eine vorhandene Tabelle mit anhängen

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

Wir geben der Funktion alles, was sie benötigt, um die Spalte vom Typ Geometrie (geo_column) an die angegebene Tabelle (my_table) anzuheften, und schreiben die wichtigen Details wie SRID (1234), Geometrietyp (MULTIPOINT) und Anzahl der Dimensionen (2) an die Tabelle geometrische Spalten. Im Wesentlichen ist es ein ALTER und drei UPDATES.

Das Erstellen von Geometriespalten auf andere Weise (aus dem Shapefile geladen, in einer CREATE TABLE AS ausgewählt usw.) kann zu räumlichen Tabellen führen, die für externe Anwendungen unsichtbar sind, obwohl sie in der Datenbank einwandfrei funktionieren. Ohne die richtigen Details, die in geometrischen Spalten gespeichert sind, werden die tatsächlichen Geometriewerte für Anwendungen, die nach projizierten Punkten, Linien oder Polygonen suchen, als unsinnige Zeichenfolgen angezeigt.

Durch Aufrufen der Testfunktion wird jede Spalte vom Typ Geometrie überprüft, neue Werte zu geometrischen Spalten hinzugefügt und Konflikte gemeldet.

Um auf Ihre Frage zurückzukommen, glaubt GeoServer nicht, dass die umbenannte Tabelle räumliche Daten enthält, wenn sich die Namensänderung nicht in geometrischen Spalten widerspiegelt. Zu beachten ist außerdem, dass die Testfunktion einen doppelten Datensatz erstellt, der den neuen Tabellennamen widerspiegelt, den ursprünglichen Datensatz jedoch nicht entfernt - ein weiteres potenzielles Problem für GeoServer.

Alles in allem würde ich Ihnen vorschlagen: 1) Führen Sie die Sonde aus und löschen Sie sofort den alten Datensatz. oder 2) Folgen Sie Ihrer Namensänderung mit einem ALTER für geometrische Spalten, um den Wert für f_table_name zu ändern.

Entschuldigung für die Worthaftigkeit, aber ich hoffe es hilft.

rec.thegeom
quelle
Danke für Ihre Antwort. Ich fange jetzt an, postGIS besser zu verstehen. Trotzdem bin ich mir nicht sicher, welche Schritte erforderlich sind. Sollte ich zuerst die Namensänderung durchführen, dann die Probe ()? Wie ändere ich die geometrischen Spalten?
Mimo
Die einfachste Möglichkeit, die Änderung in geometrische Spalten vorzunehmen, besteht darin, pgAdmin zu öffnen, mit der rechten Maustaste auf die Tabelle zu klicken, Ansichtsdaten auszuwählen, alle Zeilen anzuzeigen, in die Zelle mit dem alten Tabellennamen zu klicken und den neuen Tabellennamen einzugeben. oder UPDATE geometrische Spalten SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' UND f_table_name = 'old_table_name'
rec.thegeom
1

Ich bin nicht sicher, was SELECT probe_geometry_columns () tut, aber Sie können die Tabelle geometr_columns leicht überprüfen, um festzustellen, ob Ihr neuer Tabellenname dort enthalten ist oder ob er immer noch auf den alten verweist.

Ich vermute, dass Sie den GeoServer-Speicher neu laden müssen, um sicherzustellen, dass er die Änderungen "bemerkt". Alternativ reicht ein Stopp und ein Start aus.

Ian Turton
quelle
Was meinst du mit "GeoServer Store neu laden"?
Mimo
Auf der Statusseite ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) befindet sich eine Schaltfläche zum erneuten Laden.
Ian Turton
Vielen Dank. Das Neuladen funktionierte jedoch nicht. Ich erhalte immer noch einen GeoServer-Fehler, der sich darüber beschwert, dass die umbenannte Ebene nicht gefunden wurde. Es versucht immer noch, es unter dem alten Namen zu finden.
Mimo
Sie haben die Ebenendefinition so geändert, dass sie auf den neuen Tabellennamen verweist.
Ian Turton