Mehr

PostGIS-Tabelle umbenennen und GeoServer aktualisieren?


Ich möchte eine meiner postGIS-Tabellen umbenennen. Wenn ich dies jedoch tue, indem ich ein einfaches

ALTER TABLE alter_name RENAME TO neuer_name;

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

SELECT probe_geometry_columns()

Ist die Tabelle selbst danach in Ordnung? Oder sollten noch andere Maßnahmen ergriffen werden? Zweitens, wie aktualisiere ich GeoServer, damit er diese neue Tabelle findet? Wenn ich die obigen Befehle ausführe, und Bearbeiten Sie die Layer-Info auf dem GeoServer, um auf den neuen Namen zu verweisen… Ich erhalte immer noch eine Fehlermeldung (GeoServer versucht immer noch, ihn unter dem alten Namen zu finden). Genau, wo soll der Layername auf dem GeoServer geändert werden?


Um die Tabelle umzubenennen, müssen Sie den Namen in den Metadaten an zwei Stellen ändern. Zuerst auf PostGIS, dann auf der Geoserver config.

Um die PostGIS-Version zu ändern, können Sie die Geometrie_Spalten direkt aktualisieren. Obwohl probe_geometries den Effekt hat, diesen Eintrag in Geometriespalten einzufügen, hat es auch die Wirkung, das Schema aller Tabellen zu BESCHREIBEN und alle fehlenden Geometriespalteneinträge einzufügen. Wenn Sie viele Tabellen haben, kann dies teuer werden, warum also nicht einfach die Tabelle "geometry_columns" direkt aktualisieren?

Für die Aktualisierung des Geoservers haben Sie verschiedene Möglichkeiten. Natürlich können Sie dies manuell über die GUI tun, aber ich habe das Gefühl, dass Sie es automatisieren möchten. Ein Shell-Skript schreiben, das die Konfigurationsdateien im Geoserver-Installationsordner bearbeitet und den Geoserver neu startet, aber das ist auch der lange Weg. Ich würde Ihnen empfehlen, die REST-Konfigurations-API des Geoservers zu verwenden, mit der Sie die Layer-Konfigurationen durch RESTful-Aufrufe manipulieren können.

Aktualisieren:

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

UPDATE Geometrie_Spalten set f_table_name = 'my_new_table_name' wobei f_table_name = 'my_old_table_name';

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

Wie einige unten erwähnte Leute werden nach PostGIS 2.0 die Metadatentabellen automatisch nach der ALTER-Anweisung aktualisiert.


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

ALTER TABLE alter_name RENAME TO neuer_name;

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


SELECT Probe_Geometry_Columns();

ist ein praktisches Dienstprogramm.

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

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

Wir füttern die Funktion mit allem, was sie braucht, um die Spalte vom Typ Geometrie (geo_column) an die angegebene Tabelle (my_table) anzuhängen und die wichtigen Details wie SRID (1234), Geometrietyp (MULTIPOINT) und Anzahl der Dimensionen (2) zu schreiben die Tabelle "geometry_columns". Im Wesentlichen ist es ein ALTER und drei UPDATES.

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

Beim Aufrufen der Probe-Funktion wird jede Spalte vom Typ Geometrie überprüft, neue Werte zu Geometrie_Spalten hinzugefügt und Konflikte gemeldet.

Zurück zu Ihrer Frage: GeoServer glaubt nicht, dass die umbenannte Tabelle räumliche Daten enthält, wenn die Namensänderung nicht in Geometrie_Spalten widergespiegelt wird. Außerdem ist zu beachten, dass die Sondierungsfunktion einen doppelten Datensatz erstellt, der den neuen Tabellennamen widerspiegelt, den ursprünglichen Datensatz jedoch nicht löscht - ein weiterer potenzieller Hänger für GeoServer.

Alles in allem würde ich Ihnen vorschlagen: 1) Führen Sie den Test aus und löschen Sie dann sofort den alten Datensatz; oder 2) Verfolgen Sie Ihre Namensänderung mit einem ALTER auf Geometrie_Spalten, um den Wert f_table_name zu ändern.

Sorry für die Wortwahl, aber ich hoffe es hilft.


Ich bin mir nicht sicher, was SELECT probe_geometry_columns() macht, aber Sie können leicht in der Tabelle "geometry_columns" überprüfen, ob Ihr neuer Tabellenname dort enthalten ist oder 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 Stop-and-Start.


Schau das Video: GeoServer connects with PostgreSQL (Oktober 2021).