Comment résoudre les problèmes liés à l'extension PostGIS lors de la mise à niveau de mon instance RDS for PostgreSQL ?

Dernière mise à jour : 29/09/2022

La mise à niveau de la version majeure de mon instance Amazon Relational Database Service (Amazon RDS) for PostgreSQL a échoué en raison de problèmes liés à l'extension PostGIS.

Brève description

La mise à niveau de la version majeure de votre instance Amazon RDS for PostgreSQL peut échouer pour plusieurs raisons. La raison la plus courante est que vous n'avez pas mis à jour l'extension PostGIS ou les extensions dépendantes, telles que address_standardizer, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology ou postgis_raster, vers la version actuellement prise en charge avant d'effectuer la mise à niveau de la version majeure.

Pour vérifier si la mise à niveau de la version majeure de votre instance RDS for PostgreSQL a échoué à cause de PostGIS ou des extensions dépendantes, procédez comme suit :

1.    Vérifiez les événements de l'instance. Vous pouvez voir un événement similaire à celui qui suit :

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.    Vérifiez les fichiers journaux de pré-vérification pour l'instance de base de données qui a été créée lors du processus de mise à niveau. Pendant la mise à niveau de la version majeure, RDS for PostgreSQL exécute certaines procédures de pré-vérification sur l'instance pour identifier les problèmes qui pourraient faire échouer le processus de mise à niveau. Vous pouvez trouver des informations sur les problèmes rencontrés lors de la pré-vérification dans le fichier pg_upgrade_precheck.log. Amazon RDS ajoute un horodatage au nom du fichier.

Si le fichier journal de pré-vérification comprend un message similaire au suivant, le processus de mise à niveau a échoué à cause de PostGIS ou des extensions dépendantes.

------------------------------------------------------------------
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  ----------------------

Pour vérifier la version installée de PostGIS et des extensions dépendantes, exécutez les commandes suivantes :

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';

La valeur de la colonne installed_version indique la version actuellement installée de l'extension. Si cette colonne n'a aucune valeur, cela signifie que l'extension n'est pas installée.

Solution

Pour résoudre l'échec de la mise à niveau dans votre instance RDS for PostgreSQL, utilisez l'une des méthodes suivantes en fonction de votre cas d'utilisation.

Supprimer l'extension PostGIS

Supprimez l'extension et recréez-la une fois la mise à niveau réussie dans les conditions suivantes :

  • Vous n'avez pas besoin de PostGIS ou d'extensions dépendantes dans l'instance.
  • Il n'existe pas de chemin de mise à jour pour l'extension.

Remarque : la suppression de l'extension supprime également les colonnes dépendantes.

1.    Pour supprimer l'extension, exécutez la commande suivante :

postgres=> DROP EXTENSION example_extension CASCADE;

2.    Après avoir supprimé les extensions dans toutes les bases de données où elles sont installées, mettez à niveau votre instance RDS for PostgreSQL.

3.    Après avoir mis à niveau l'instance, créez l'extension, si nécessaire, en exécutant la commande suivante :

postgres=> CREATE EXTENSION extension_name;

Mettre à jour l'extension PostGIS

Procédez comme suit :

  • Effectuez la mise à niveau en plusieurs étapes.
  • Mettez à jour la version de l'extension à chaque étape avant de mettre à niveau l'instance RDS for PostgreSQL.

Vérifiez le chemin de mise à jour le plus élevé pris en charge pour l'extension installée dans votre instance RDS for PostgreSQL. Exécutez la commande suivante :

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

Assurez-vous de remplacer les éléments suivants :

  • extension_name avec le nom de l'extension installée
  • current_version avec la version actuellement installée de l'extension

Si la commande ne renvoie pas de chemin de mise à jour, mais que les valeurs installed_version et default_version des extensions sont identiques, cela signifie que l'extension est déjà mise à jour. Dans ce cas, vous pouvez effectuer la mise à niveau de la version du moteur.

Par exemple :

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

Exemple de sortie :

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

Si les valeurs installed_version et default_version sont différentes, mettez à niveau l'extension PostGIS installée et les extensions dépendantes vers la version cible prise en charge la plus élevée.

Pour mettre à niveau l'extension, exécutez la commande suivante :

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

Remarque : assurez-vous de mettre à jour l'extension PostGIS ainsi que les extensions dépendantes de l'instance. Ces extensions sont installées au niveau de la base de données. Assurez-vous donc de mettre à jour les extensions dans toutes les bases de données où elles ont été installées.

Pour mettre à jour PostGIS et l'extension postgis_raster lorsque vous utilisez PostGIS version 2.5.0 ou ultérieure, exécutez la commande suivante :

postgres=> SELECT postgis_extensions_upgrade();

Dans PostGIS version 3.0 et versions ultérieures, la fonctionnalité raster est divisée en une extension distincte. Si vous n'utilisez pas raster, exécutez la commande suivante après avoir mis à jour l'extension :

postgres=> DROP EXTENSION postgis_raster;

Après avoir mis à jour les extensions, vous pouvez mettre à niveau l'instance RDS for PostgreSQL vers la version du moteur dans laquelle ces versions d'extension sont prises en charge.

Après avoir mis à niveau votre instance, vous pouvez répéter les étapes de mise à jour de la version de l'extension suivie de la mise à niveau de la version du moteur de l'instance RDS jusqu'à ce que vous installiez la version du moteur cible.


Cet article vous a-t-il été utile ?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?