Wie behebe ich Probleme im Zusammenhang mit der PostGIS-Erweiterung beim Upgrade meiner RDS-für-PostgreSQL-Instance?

Zuletzt aktualisiert: 03.06.2022

Das Upgrade der Hauptversion für mein Amazon Relational Database Service (Amazon RDS) für PostgreSQL-Instance ist aufgrund von Problemen mit der PostGIS-Erweiterung fehlgeschlagen.

Kurzbeschreibung

Das Upgrade der Hauptversion für Ihre RDS-für-PostgreSQL-Instance kann aus mehreren Gründen fehlschlagen. Der häufigste Grund könnte sein, dass Sie die PostGIS-Erweiterung oder abhängige Erweiterungen wie address_standardisierer, address_standardisier_data_us, postgis_tiger_geocoder, postgis_topology und postgis_raster nicht auf die aktuell unterstützte Version aktualisiert haben, bevor Sie das Upgrade der Hauptversion durchgeführt haben.

Überprüfen Sie, ob das Upgrade der Hauptversion Ihrer RDS-PostgreSQL-Instance aufgrund von PostGIS oder abhängigen Erweiterungen fehlgeschlagen ist, wie folgt:

1.    Überprüfen Sie die Ereignisse für die Instance. Möglicherweise sehen Sie ein Ereignis, das dem folgenden ähnelt:

Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because one or more databases have settings or usages that are not compatible with the target engine version. Please check the precheck log file for more details

2.    Überprüfen Sie die Vorabprüfungs-Protokolldateien für die Datenbank-Instance, die während des Upgrade-Vorgangs erstellt wurde. Während des Upgrades der Hauptversion führt RDS für PostgreSQL bestimmte Vorabprüfungen auf der Instance durch, um Probleme zu identifizieren, die zum Fehlschlagen des Upgrade-Vorgangs führen könnten. Informationen zu Problemen, die während der Vorabprüfung aufgetreten sind, finden Sie in der Datei pg_upgrade_precheck.log. Amazon RDS hängt einen Zeitstempel an den Dateinamen an.

Wenn die Vorabprüfungs-Protokolldatei eine Meldung ähnlich der folgenden enthält, ist der Upgrade-Prozess aufgrund von PostGIS oder abhängigen Erweiterungen fehlgeschlagen.

------------------------------------------------------------------
Upgrade could not be run on Sun May 22 14:20:45 2022
------------------------------------------------------------------
The instance could not be upgraded from 9.6.22.R1 to 12.7.R1 because of following reasons.
Please take appropriate action on databases that have usages incompatible with requested major engine version upgrade and try again.
- Following usages in database 'test_db' need to be corrected before upgrade:
-- The instance could not be upgraded because the PostGIS extension and its dependent extensions (address_standardizer,
address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster) installation in one or more databases is
not compatible with your desired upgrade path. Please upgrade postgis and its dependent extensions to version supported in requested version.
----------------------- END OF LOG  ----------------------

Führen Sie die folgenden Befehle aus, um die installierte Version von PostGIS und abhängigen Erweiterungen zu überprüfen:

postgres=> select * FROM pg_available_extensions where name like '%postgis%';
postgres=> select * FROM pg_available_extensions where name like '%address_standardizer%';
postgres=> select probin from pg_proc where proname = 'postgis_raster_lib_version';

Der Wert in der Spalte installed_version zeigt die aktuell installierte Version der Erweiterung an. Wenn diese Spalte keinen Wert hat, bedeutet das, dass die Erweiterung nicht installiert ist.

Auflösung

Verwenden Sie je nach Anwendungsfall eine der folgenden Methoden, um den Upgrade-Fehler in Ihrer RDS-für-PostgreSQL-Instance zu beheben.

Entfernen der PostGIS-Erweiterung

Wenn Sie PostGIS oder abhängige Erweiterungen in der Instance nicht benötigen, löschen Sie die Erweiterung und erstellen Sie sie neu, nachdem das Upgrade erfolgreich war.

Hinweis: Durch das Löschen der Erweiterung werden auch die abhängigen Spalten entfernt.

1.    Führen Sie den folgenden Befehl aus, um die Erweiterung zu löschen:

postgres=> DROP EXTENSION example_extension CASCADE;

2.    Aktualisieren Sie Ihre RDS-für-PostgreSQL-Instance, nachdem Sie die Erweiterungen in allen Datenbanken gelöscht haben, in denen sie installiert sind.

3.    Erstellen Sie nach dem Upgrade der Instance bei Bedarf die Erweiterung, indem Sie den folgenden Befehl ausführen:

postgres=> CREATE EXTENSION extension_name;

Aktualisieren der PostGIS-Erweiterung

Führen Sie die folgenden Schritte aus:

  • Führen Sie das Upgrade in mehreren Schritten durch.
  • Aktualisieren Sie die Erweiterungsversion in jedem Schritt, bevor Sie die RDS-für-PostgreSQL-Instance aktualisieren.

Suchen Sie nach dem nächsthöheren unterstützten Aktualisierungspfad für die Erweiterung, die in Ihrer RDS-für-PostgreSQL-Instance installiert ist. Führen Sie den folgenden Befehl aus:

postgres=> SELECT * FROM pg_extension_update_paths('extension_name') WHERE source='current_version' AND target NOT LIKE '%next%' AND source<target AND path LIKE '%--%';

Achten Sie darauf, Folgendes zu ersetzen:

  • extension_name mit dem Namen der installierten Erweiterung
  • current_version mit der aktuell installierten Version der Erweiterung

Wenn der Befehl keinen Aktualisierungspfad zurückgibt, aber die Werte installed_version und default_version der Erweiterungen identisch sind, bedeutet dies, dass die Erweiterung bereits aktualisiert wurde. In diesem Fall können Sie das Upgrade der Engine-Version durchführen.

Beispiel:

postgres=> SELECT * FROM pg_extension_update_paths('postgis') WHERE source='2.3.7' AND target NOT LIKE '%next%' AND source<target AND path LIKE '%--%';

Beispielausgabe:

source | target |     path
------+--------+--------------
2.3.7  | 2.5.2  | 2.3.7--2.5.2 (1 row)

Wenn die Werte für installed_version und default_version unterschiedlich sind, führen Sie ein Upgrade des installierten PostGIS und der abhängigen Erweiterungen auf die höchste unterstützte Zielversion durch.

Führen Sie den folgenden Befehl aus, um die Erweiterung zu aktualisieren:

postgres=> ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

Hinweis: Achten Sie darauf, die PostGIS-Erweiterung zusammen mit den abhängigen Erweiterungen in der Instance zu aktualisieren. Diese Erweiterungen werden auf Datenbankebene installiert. Stellen Sie daher sicher, dass Sie die Erweiterungen in allen Datenbanken aktualisieren, in denen sie installiert wurden.

Führen Sie den folgenden Befehl aus, um PostGIS und die Erweiterung postgis_raster zu aktualisieren, wenn Sie PostGIS Version 2.5.0 oder höher verwenden:

postgres=> SELECT postgis_extensions_upgrade();

In PostGIS Version 3.0 und höher ist die Raster-Funktionalität als separate Erweiterung aufgeteilt. Wenn Sie kein Raster verwenden, führen Sie nach dem Aktualisieren der Erweiterung den folgenden Befehl aus:

postgres=> DROP EXTENSION postgis_raster;

Nach dem Update der Erweiterungen können Sie die RDS-für-PostgreSQL-Instance auf die Engine-Version aktualisieren, in der diese Erweiterungsversionen unterstützt werden.

Nach dem Upgrade Ihrer Instance können Sie die Schritte zum Aktualisieren der Erweiterungsversion wiederholen, gefolgt von einem Upgrade der Version der RDS-Instance-Engine, bis Sie die Ziel-Engine-Version installiert haben.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?