Wie behebe ich Probleme im Zusammenhang mit der PostGIS-Erweiterung, wenn ich meine RDS for PostgreSQL-Instance aktualisiere?

Lesedauer: 6 Minute
0

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

Kurzbeschreibung

Das Hauptversions-Upgrade für Ihre Amazon RDS for PostgreSQL-Instance kann aus mehreren Gründen fehlschlagen. Der häufigste Grund ist eine veraltete PostGIS-Erweiterung oder abhängige Erweiterungen. Bevor Sie das Upgrade der Hauptversion durchführen, müssen Sie PostGIS und die abhängigen Erweiterungen aktualisieren. Zu den abhängigen Erweiterungen gehören address\ _standardizer, address\ _standardizer\ _data\ _us, postgis\ _tiger\ _geocoder, postgis\ _topology oder postgis\ _raster.

Stellen Sie zunächst fest, ob das Upgrade der Hauptversion Ihrer RDS für PostgreSQL-Instance aufgrund von Erweiterungen fehlgeschlagen ist. Wenn das Problem bei den Erweiterungen liegt, aktualisieren Sie PostGIS und seine abhängigen Erweiterungen.

Behebung

Prüfen Sie, ob Ihre Instance-Erweiterungs-Upgrades benötigt

Führen Sie die folgenden Aufgaben aus, um festzustellen, ob das Upgrade der Hauptversion Ihrer RDS für die PostgreSQL-Instance aufgrund von Erweiterungen fehlgeschlagen ist.

Sehen Sie sich die Ereignisse für die Instance an. 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

Sehen Sie sich die Precheck-Protokolldateien für die Instance an. Bei einem Hauptversions-Upgrade führt RDS für PostgreSQL Precheck-Prozeduren für die Instance durch. Probleme, die beim Precheck auftreten, findn Sie in der Datei pg\ _upgrade\ _precheck.log.

Wenn die Vorabprüfungsprotokolldatei eine Meldung ähnlich dem folgenden Beispiel enthält, ist der Upgrade-Vorgang aufgrund der PostGIS-Erweiterungen oder abhängiger 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 den zugehörigen 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, ist die Erweiterung nicht installiert.

Bereiten Sie das Upgrade der PostGIS-Erweiterungen vor

Wenn Sie eine RDS for PostgreSQL-Instance aktualisieren, gehen Sie wie folgt vor:

  • Führen Sie das Upgrade in mehreren Schritten durch.
  • Bevor Sie die RDS for PostgreSQL-Instance aktualisieren, aktualisieren Sie in jedem Schritt zunächst die Erweiterungsversion.

Führen Sie den Befehl **SELECT postgis\ _full\ _version ()**aus. Prüfen Sie in der Ausgabe, ob Erweiterungen vorhanden sind, für die ein Upgrade aussteht.

Beispielausgabe mit Erweiterungen, die aktualisiert werden müssen:

postgres=>  SELECT postgis_full_version();
                                                                                                                        postgis_full_version                                                                                                                          
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.2.5 r15298" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" (core procs from "2.2.2 r14797" need upgrade) RASTER (raster procs from "2.2.2 r14797" need upgrade)

Beispielausgabe ohne Erweiterungen, die ein Upgrade erfordern:

postgres=> SELECT postgis_full_version();
                                                                                postgis_full_version                                                                                 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POSTGIS="2.3.7 r16523" PGSQL="96" GEOS="3.6.2-CAPI-1.10.2 4d2925d6" PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.1.4, released 2017/06/23" LIBXML="2.9.1" LIBJSON="0.12.1" RASTER
(1 row)

Wählen Sie die Version, die für ein Upgrade verfügbar ist, aus

Stellen Sie sicher, dass die PostGIS-Installations- und Versionsinformationen in der Ausgabe der pg_extension-Katalogtabelle mit dem Befehl SELECT postgis\ _full\ _version () übereinstimmen.

Führen Sie den folgenden Befehl aus, um nach der nächsten unterstützten Version für die Erweiterungen zu suchen, die in Ihrer RDS für die PostgreSQL-Instance installiert sind:

postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'postgis%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1;
postgres=> SELECT name,version,installed FROM pg_catalog.pg_available_extension_versions WHERE name LIKE 'address%' AND version NOT LIKE ALL (array['%next%','%unpackaged%']) order by 2,1;

Wählen Sie die höchste unterstützte Version aus, die für ein Upgrade verfügbar ist.

Hinweis: Überprüfen Sie vor einem Upgrade der PostgreSQL-Engine die Tabelle pg_extension, um sicherzustellen, dass es keine „next“, „dev“ oder „unpackaged“-Erweiterungsversionen gibt. Wenn Sie eine dieser Versionen verwenden, empfiehlt es sich, zuerst zur Standarderweiterungsversion zu wechseln.

Aktualisieren der Erweiterungen

Führen Sie einen der folgenden Befehle aus, um die Erweiterungen zu aktualisieren.

Wenn die installierte Version von PostGIS 2.5 oder höher ist, führen Sie den folgenden Befehl aus:

SELECT postgis_extensions_upgrade();


Um PostGIS von Version 2.5.x auf 3.x zu aktualisieren, führen Sie den folgenden Befehl zweimal aus:

SELECT postgis_extensions_upgrade();

Wenn die installierte Version von PostGIS Version 2.4 oder früher ist, führen Sie den Befehl ALTER EXTENSION aus:

ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

Wenn Sie mehrere PostGIS-Module installiert haben, z. B. postgis\ _topology, aktualisieren Sie jedes Modul einzeln. Das folgende Beispiel zeigt die bewährte Methode, mehrere Module mit dem Befehl ALTER EXTENSION zu aktualisieren:

ALTER EXTENSION postgis UPDATE TO 'new-version';

ALTER EXTENSION postgis_topology UPDATE TO 'new-version';

ALTER EXTENSION postgis_tiger_geocoder UPDATE TO 'new-version';


Hinweis: Erweiterungen werden auf Datenbankebene installiert. Stellen Sie sicher, dass Sie die Erweiterungen in allen Datenbanken aktualisieren, in denen sie installiert sind.

Wenn die aktuell installierte PostGIS-Version 3.0 oder höher ist, müssen Sie die Raster-Funktionen separat aktualisieren. Wenn Sie keine Raster-Funktionen verwenden, führen Sie den folgenden Befehl aus, nachdem Sie die Erweiterungen aktualisiert haben:

postgres=> DROP EXTENSION postgis_raster;

Nachdem Sie die Erweiterungen aktualisiert haben, aktualisieren Sie die RDS fpr die PostgreSQL Engine-Version für die unterstützten Erweiterungsversionen.

Nachdem Sie Ihre Instance aktualisiert haben, wiederholen Sie die Schritte, um die installierte Version von PostGIS und die abhängigen Erweiterungen zu überprüfen.

Hinweis: Es ist eine bewährte Methode, PostGIS und seine abhängigen Erweiterungen auf die neueste unterstützte Version Ihrer aktuellen RDS für die PostgreSQL-Version zu aktualisieren.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 8 Monaten