Wie kann ich Daten von einer PostGIS-Datenbank in eine andere übertragen?

8

Ich habe ziemlich viele GIS-Daten in einer alten PostGIS-Datenbank (Version "1.1.6") und muss sie in eine andere PostGIS-Datenbank übertragen ("POSTGIS =" 1.5.3 ").

Ich habe versucht, ein Backup zu erstellen und dieses in der neuen Datenbank wiederherzustellen, aber es werden mehrere hundert Fehler ausgegeben.

Wie werden die Daten korrekt übertragen?

Devdatta Tengshe
quelle
Haben Sie getestet, ob es trotz der Fehler funktioniert?
RK
@RK Ja, es funktioniert; Ich hatte das Gefühl, dass es eine subtile Datenkorruption geben könnte, die mir möglicherweise nicht bewusst ist. Ich habe mich auch gefragt, ob es eine bessere Möglichkeit gibt, die Daten fehlerfrei zu übertragen.
Devdatta Tengshe

Antworten:

6

Laut Paul Ramsey :

Erstens müssen Sie für die Erhöhung der Patch-Version (z. B. XYZ -> XY (Z + 1)) in PostgreSQL und PostGIS nichts anderes tun, als die neue Software zu installieren. Die Daten können an Ort und Stelle bleiben und alles wird einfach funktionieren.

Für geringfügige Versionserhöhungen in PostgreSQL (z. B. XYZ -> X. (Y + 1) .Z) müssen Sie sichern und wiederherstellen. Für geringfügige Versionserhöhungen in PostGIS müssen Sie ein "Soft-Upgrade" durchführen. Dies bedeutet, dass die Daten an Ort und Stelle bleiben, aber die Upgrade-Skripte (z. B. postgis_upgrade_14_to_15.sql) nach der Installation des Software-Updates ausgeführt werden.

Schließlich müssen Sie für größere Versionserhöhungen in PostgreSQL und PostGIS (z. B. XYZ -> (X + 1) .YZ) sichern und wiederherstellen.

Haben Sie Daten im öffentlichen Schema gespeichert?

Damit komme ich zu dem eigentlichen Punkt, den ich ansprechen möchte: Sie können die Speicherung und Wiederherstellung von PostGIS-Daten so einfach wie möglich gestalten, wenn Sie sicherstellen, dass Sie keine Daten im "öffentlichen" Schema speichern.

Es geht jedoch nicht alles verloren, wenn Sie Daten im öffentlichen Schema gespeichert haben

"Aber Paul", sagen Sie, "ich habe bereits einen vollständigen Datenbank-Dump. Heißt das, ich bin SOL?" Nein, aber du brauchst einen starken Magen. Richten Sie zunächst Ihr neues PostgreSQL ein. Erstellen Sie eine leere Datenbank und laden Sie PostGIS hinein. Laden Sie nun Ihre Sicherungsdatei in diese Datenbank. Sie werden viele Fehler sehen. Diese Fehler werden jedoch durch alte PostGIS-Funktions- und Typdefinitionen aus Ihrer Speicherauszugsdatei verursacht, die im Widerspruch zu den vorhandenen Typdefinitionen in Ihrer Datenbank stehen. Und da Sie die neuen Definitionen wollen, nicht die alten, ist das in Ordnung. Ihre Last sollte trotz aller Geräusche und Fehler tatsächlich funktionieren. Sobald dies erledigt ist, können Sie Ihre Daten in ein schönes separates Schema verschieben, damit Sie das nächste Mal eine saubere, fehlerfreie Wiederherstellung durchführen können.

Haben Sie getestet, ob es trotz der Fehler funktioniert?

Auf der PostGIS-Website finden Sie auch einen Abschnitt zum Aktualisieren von PostGIS .

RK
quelle
Das öffentliche Schema ist also im Grunde genommen für temporäre Tabellen?
Nickves
3
Nee. Es ist nur so, dass in der Öffentlichkeit "die PostGIS-Funktionen und Systemtabellen installiert werden. Wenn Sie also dieses Schema sichern, erhalten Sie alle diese Definitionen in Ihrem Speicherauszug." Dies ist nur in Ordnung, wenn Sie zu einer anderen PostGIS-Datenbank mit derselben Version wie das Original wechseln. Dies kann jedoch ein Problem sein, wenn die Definitionsdatenbank eine andere Version hat. Die neue Version verfügt möglicherweise über andere Funktionsdefinitionen, die mit denen im öffentlichen Schema in Konflikt stehen können.
RK
2

Überprüfen Sie die üblichen Tabellen und "Tabellen mit Geometrie" und verwenden Sie sie dann (am Shell / UNIX-Terminal).

  • pg_dumpzum exportieren die üblichen tabellen (importieren mit psql)
  • pgsql2shpzum Exportieren der Geotabellen und shp2pgsqlzum Importieren.

Der letzte (pgsql2shp) ist für den "Fehler" von pg_dump beim Exportieren von "alten in neue PostGIS-Daten" -Versionen. Wenn keine Fehler vorliegen, benötigen Sie natürlich nur pg_dump.

Überprüfen Sie zuerst die @ RK-Empfehlung, psql -f postgis_upgrade_1X_to_15.sql -d your_spatial_database... Im Allgemeinen (Bot nicht immer) ist in Ordnung ... Das pgsql2shp ist die letzte Option.

Peter Krauss
quelle
1

Ich stimme den anderen Antworten zu und habe die Methode pg_dump verwendet. Ein weiterer Vorteil besteht darin, dass Sie den Speicherauszug beispielsweise zu einem Zip oder Tar komprimieren und bei Bedarf auf einen anderen Server verschieben können.

tjmgis
quelle
pg_dump exportiert PostGIS-Daten mit einigen "Fehlern" ... pgsql2shp exportiert die Geometrien besser, wenn alte PostGIS-Versionen in neue Versionen exportiert werden.
Peter Krauss