Amazon Relational Database Service
Guide de l'utilisateur

Mise à niveau du moteur de base de données PostgreSQL pour Amazon RDS

Lorsque Amazon RDS prend en charge une nouvelle version d'un moteur de base de données, vous pouvez mettre à niveau vos instances de base de données vers cette nouvelle version. Il existe deux types de mises à niveau pour les instances de base de données PostgreSQL : les mises à niveau de version majeure et les mises à niveau de version mineure.

Les mises à niveau de version majeure peuvent contenir des modifications de base de données qui ne sont pas rétrocompatibles avec les applications existantes. En conséquence, vous devez effectuer manuellement les mises à niveau de version majeure de vos instances de base de données. Vous pouvez lancer une mise à niveau de version majeure en modifiant votre instance de base de données. Cependant, avant d'effectuer une mise à niveau de version majeure, nous vous recommandons de suivre les étapes décrites dans Mises à niveau de version majeure pour PostgreSQL.

En revanche, une mise à niveau de version mineure contient uniquement des modifications rétrocompatibles avec les applications existantes. Vous pouvez lancer manuellement une mise à niveau de version mineure en modifiant votre instance de base de données. Vous pouvez également activer l'option Mise à niveau automatique des versions mineures lorsque vous créez ou modifiez une instance de base de données. Dans ce cas, votre instance de base de données est automatiquement mise à niveau une fois que Amazon RDS a testé et approuvé la nouvelle version. Pour en savoir plus, consultez Mises à niveau automatiques des versions mineures pour PostgreSQL. Pour de plus amples informations sur l'exécution manuelle d'une mise à niveau de version mineure, veuillez consulter Mise à niveau manuelle de la version du moteur.

Si votre instance de base de données PostgreSQL utilise des réplicas en lecture, vous devez mettre à niveau tous les réplicas en lecture avant de mettre à niveau l'instance source. Si l'instance de base de données figure dans un déploiement Multi-AZ, les réplicas enregistreur et de secours sont mis à niveau, et l'instance peut ne pas être disponible tant que la mise à niveau n'est pas terminée.

Présentation de la mise à niveau de PostgreSQL

Pour mettre à niveau vos instances de base de données en toute sécurité, Amazon RDS utilise l'utilitaire pg_upgrade décrit dans la documentation PostgreSQL.

Amazon RDS prend deux instantanés de base de données au cours du processus de mise à niveau si la période de rétention des sauvegardes est supérieure à 0. Le premier instantané de base de données porte sur l'instance de base de données avant que toute modification de mise à niveau soit apportée. Si la mise à niveau ne fonctionne pas pour vos bases de données, vous pouvez restaurer cet instantané pour créer une instance de base de données exécutant l'ancienne version. Le second instantané de base de données est pris à la fin de la mise à niveau.

Note

Amazon RDS ne prend des instantanés de base de données pendant le processus de mise à niveau que si vous avez défini la période de rétention des sauvegardes de votre instance de base de données sur un nombre supérieur à 0. Pour modifier la période de rétention des sauvegardes, consultez Modification d'une instance de base de données exécutant le moteur de base de données PostgreSQL.

Si votre instance de base de données se trouve dans un déploiement multi-AZ, l'instance de base de données enregistreur principale et l'instance de secours sont toutes deux mises à niveau. Les instances de base de données enregistreur et de secours sont mises à niveau simultanément et vous devez faire face à une interruption jusqu'à ce que la mise à niveau soit terminée.

Une fois une mise à niveau terminée, vous ne pouvez pas rétablir la version précédente du moteur de base de données. Si vous souhaitez revenir à la version précédente, restaurez l'instantané de base de données pris avant la mise à niveau pour créer une nouvelle instance de base de données.

Mises à niveau de version majeure pour PostgreSQL

Les mises à niveau de version majeure peuvent contenir des modifications de base de données qui ne sont pas rétrocompatibles avec les versions antérieures de la base de données. Cette fonctionnalité peut empêcher le bon fonctionnement de vos applications existantes.

En conséquence, Amazon RDS n'applique pas les mise à niveau de version majeure automatiquement. Pour effectuer une mise à niveau de version majeure, modifiez votre instance de base de données manuellement. Veillez à tester soigneusement toute mise à niveau pour vérifier que vos applications fonctionnent correctement avant d'appliquer la mise à niveau à vos instances de base de données de production. Lorsque vous effectuez une mise à niveau de version majeure de PostgreSQL, nous vous recommandons de suivre les étapes décrites dans Comment effectuer une mise à niveau de version majeure.

Choix parmi plusieurs versions majeures

Vous pouvez mettre à niveau une base de données PostgreSQL vers sa version majeure suivante. À partir de certaines versions de la base de données PostgreSQL, vous pouvez passer à une version majeure ultérieure lors de la mise à niveau. Le tableau suivant répertorie les versions source de la base de données PostgreSQL et les versions majeures cibles associées pour la mise à niveau.

Note

  • Les mises à niveau sont possibles vers une version ultérieure publiée en même temps que la version mineure source ou ultérieurement.

  • Si une base de données utilise l'extension PostGIS, vous ne pouvez pas omettre les versions majeures pour certaines combinaisons source-cible. Dans ce cas, effectuez la mise à niveau par étapes pour passer à la version majeure suivante une à une jusqu'à ce que vous atteignez la version cible voulue.

  • L'extension pgRouting n'est pas prise en charge pour une mise à niveau qui fait omet une version majeure et passe directement aux versions 11.x. Une version majeure est omise lorsque la mise à niveau passe des versions 9.4.x, 9.5.x ou 9.6.x aux versions 11.x. Il est plus sûr de supprimer l'extension pgRouting puis de l'ajouter à nouveau une fois la mise à niveau exécutée.

  • Les extensions tsearch2 et chkpass ne sont pas prises en charge dans PostgreSQL 11 ou version ultérieure. Si vous effectuez une mise à niveau vers la version 11.x, supprimez ces extensions avant la mise à niveau.

Version source actuelle Versions majeures cibles Versions majeures cibles supplémentaires (sans l'extension PostGIS)
9.3.x 9.4.x
9.3.23 9.4.x, 9.5.13 9.6.9
9.3.24 9.4.x, 9.5.14 9.6.10
9.3.25 9.4.x, 9.5.15 9.6.11
9.4.x 9.5.x
9.4.20 9.5.x 11.1
9.4.21 9.5.x 10.7, 11.2
9.4.23 9.5.x 10.9, 11.4
9.4.24 9.5.x, 9.6.15, 10.10, 11.5
9.5.x 9.6.x
9.5.15 9.6.x 11.1
9.5.16 9.6.x 10.7, 11.2
9.5.18 9.6.x 10.9, 11.4
9.5.19 9.6.x, 10.10, 11.5
9.6.x 10.x
9.6.11 10.x 11.1
9.6.12 10.x 11.2
9.6.14 10.x 11.4
9.6.15 10.x, 11.5
10.x 11.x

Comment effectuer une mise à niveau de version majeure

Nous vous recommandons de suivre le processus ci-dessous lors de la mise à niveau d'une instance de base de données PostgreSQL Amazon RDS :

  1. Préparez un groupe de paramètres compatible avec la version – Si vous utilisez un groupe de paramètres personnalisé, vous avez deux options. Vous pouvez spécifier un groupe de paramètres par défaut pour la nouvelle version du moteur de base de données. Ou vous pouvez créer votre propre groupe de paramètres personnalisé pour la nouvelle version du moteur de base de données

    Si vous associez un nouveau groupe de paramètres à une instance de base de données, redémarrez la base de données à la fin de la mise à niveau. Si l'instance doit être redémarrée pour appliquer les modifications du groupe de paramètres, le statut du groupe de paramètres de l'instance indique pending-reboot. Vous pouvez afficher le statut du groupe de paramètres d'une instance dans la console ou en utilisant une commande describe, comme .describe-db-instances.

  2. Recherchez une utilisation non prise en charge :

    • Transactions préparées – Validez ou restaurez toutes les transactions préparées ouvertes avant d'essayer d'effectuer une mise à niveau.

      Vous pouvez utiliser la requête suivante pour vérifier qu'aucune transaction préparée ouverte ne figure sur votre instance.

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Type de données ligne – Si vous mettez à niveau une instance PostgreSQL 9.3 RDS, supprimez toutes les utilisations du type de données line avant d'essayer d'effectuer la mise à niveau. Le type de données line n'a été totalement mis en œuvre dans PostgreSQL qu'à partir de la version 9.4.

      Pour vérifier l'absence de toute utilisation du type de données line, utilisez la requête suivante sur chaque base de données à mettre à niveau.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid = 'pg_catalog.line'::pg_catalog.regtype AND c.relnamespace = n.oid AND n.nspname !~ '^pg_temp_' AND n.nspname !~ '^pg_toast_temp_' AND n.nspname NOT IN ('pg_catalog', 'information_schema');

      Note

      Pour répertorier toutes les bases de données d'une instance, utilisez la requête suivante.

      SELECT d.datname FROM pg_catalog.pg_database d WHERE d.datallowconn = true;
    • Types de données Reg* – Supprimez toutes les utilisations des types de données reg* avant d'essayer d'effectuer une mise à niveau. À l'exception de regtype et regclass, vous ne pouvez pas mettre à niveau les types de données reg*. L'utilitaire pg_upgrade ne peut pas conserver ce type de données, qui est utilisé par Amazon RDS pour effectuer la mise à niveau.

      Pour vérifier l'absence de toute utilisation des types de données reg* non pris en charge, utilisez la requête suivante pour chaque base de données.

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  3. Gérez les réplicas en lecture – Un réplica en lecture ne peut pas faire l'objet d'une mise à niveau de version majeure, mais l'instance source du réplica en lecture le peut. Si l'instance source d'un réplica en lecture fait l'objet d'une mise à niveau de version majeure, tous les réplicas en lecture de cette instance source conservent la version précédente du moteur. Dans ce cas, les réplicas en lecture ne peuvent plus répliquer les modifications effectuées sur l'instance source.

    Nous vous recommandons de promouvoir vos réplicas en lecture, ou de les supprimer et de les recréer après la mise à niveau de l'instance source vers une autre version majeure. Pour plus d'informations, consultez Utilisation de réplicas en lecture PostgreSQL.

  4. Effectuez une opération VACUUM – Pour réduire les temps d'arrêt, effectuez une opération VACUUM avant de mettre à niveau votre instance de base de données. Si vous n'effectuez pas d'opération VACUUM, le processus de mise à niveau peut prendre beaucoup plus de temps. En effet, l'utilitaire pg_upgrade effectue une opération vacuum sur chaque base de données lorsque vous effectuez une mise à niveau vers une autre version majeure.

  5. Effectuez une sauvegarde – Nous vous recommandons d'effectuer une sauvegarde avant d'effectuer la mise à niveau de version majeure, afin de disposer d'un point de restauration connu pour votre base de données. Si la période de rétention des sauvegardes est supérieure à 0, le processus de mise à niveau crée des instantanés de base de données de votre instance de base de données avant et après la mise à niveau. Pour modifier la période de rétention des sauvegardes, consultez Modification d'une instance de base de données exécutant le moteur de base de données PostgreSQL. Pour effectuer une sauvegarde manuellement, consultez Création d'un instantané de base de données.

  6. Mettez à jour de certaines extensions avant une mise à niveau de version majeure – Si vous envisagez d'omettre une version majeure avec la mise à niveau, vous devez mettre à jour certaines extensions avant d'effectuer la mise à niveau de version majeure. La mise à niveau des versions 9.4.x, 9.5.x ou 9.6.x vers les versions 11.x entraîne une omission de la version majeure. Les extensions à mettre à jour sont les suivantes :

    • address_standardizer

    • address_standardizer_data_us

    • postGIS

    • postgis_tiger_geocoder

    • postgis_topology

    Exécutez la commande suivante pour chaque extension que vous utilisez.

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

    Pour connaître les versions d'extension vers lesquelles vous pouvez effectuer une mise à jour, veuillez consulter Extensions et modules PostgreSQL pris en charge sur Amazon RDS.

  7. Supprimez certaines extensions avant une mise à niveau de version majeure – Une mise à niveau qui omet une version majeure pour passer directement à la version 11.x ne prend pas en charge la mise à jour de l'extension pgRouting. La mise à niveau des versions 9.4.x, 9.5.x ou 9.6.x vers les versions 11.x entraîne une omission de la version majeure. Il est plus sûr de supprimer l'extension pgRouting puis de la réinstaller sur une version compatible une fois la mise à niveau effectuée. Pour connaître les versions d'extension vers lesquelles vous pouvez effectuer une mise à jour, veuillez consulter Extensions et modules PostgreSQL pris en charge sur Amazon RDS.

    Les extensions tsearch2 et chkpass ne sont plus prises en charge pour PostgreSQL versions 11 ou ultérieures. Si vous effectuez une mise à niveau vers la version 11.x, supprimez les extensions tsearch2 et chkpass avant la mise à niveau.

  8. Réalisez un essai de mise à niveau – Nous vous recommandons fortement de tester la mise à niveau de version majeure sur un doublon de votre base de données de production avant d'essayer d'effectuer la mise à niveau sur votre base de données de production. Pour créer un doublon d'instance de test, vous pouvez restaurer votre base de données à partir d'un instantané récent ou réaliser une restauration de votre base de données à sa date de restauration possible la plus récente. Pour de plus amples informations, veuillez consulter Restaurer à partir d'un instantané ou Restauration d'une instance de base de données à une date spécifiée. Pour en savoir plus sur la procédure de mise à niveau, consultez Mise à niveau manuelle de la version du moteur.

    Durant la mise à niveau de version majeure, les bases de données public et template1, ainsi que le schéma public figurant dans chaque base de données de l'instance, sont renommés temporairement. Ces objets apparaissent dans les journaux avec leur nom d'origine et une chaîne aléatoire ajoutée. Cette chaîne est ajoutée afin que les paramètres personnalisés tels que locale et owner soient conservés au cours de la mise à niveau de version majeure. À la fin de la mise à niveau, les objets reprennent leurs noms d'origine.

    Note

    Au cours du processus de mise à niveau de version majeure, vous ne pouvez pas effectuer de restauration à un moment donné de votre instance. Après avoir effectué la mise à niveau, Amazon RDS réalise une sauvegarde automatique de l'instance. Vous pouvez effectuer une restauration à un moment donné pour revenir à un moment antérieur au début de la mise à niveau et postérieur à la sauvegarde automatique de votre instance.

  9. Résolvez les problèmes si une mise à niveau échoue avec des erreurs de procédure de pré-vérification – Au cours du processus de mise à niveau de version majeure, Amazon RDS pour PostgreSQL exécute d'abord une procédure de pré-vérification pour identifier les éventuels problèmes pouvant provoquer un échec de la mise à niveau. Le procédure de pré-vérification recherche les éventuelles conditions d'incompatibilité entre toutes les bases de données de l'instance.

    Si la pré-vérification détecte un problème, elle crée un événement de journal indiquant l'échec de la pré-vérification de mise à niveau. Les détails de la procédure de pré-vérification se trouvent dans un journal de mise à niveau nommé pg_upgrade_precheck.log pour toutes les bases de données d'une instance de base de données. Amazon RDS ajoute un horodatage au nom du fichier. Pour de plus amples informations sur l'affichage des journaux, veuillez consulter Fichiers journaux de base de données Amazon RDS.

    Résolvez tous les problèmes identifiés dans le journal de pré-vérification puis relancez la mise à niveau de version majeure. Voici un exemple de journal de pré-vérification.

    ------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
  10. Mettez à niveau votre instance de production – Si l'essai de mise à niveau de version majeure est un succès, vous devez être en mesure de mettre à niveau en toute confiance votre base de données de production. Pour de plus amples informations, veuillez consulter Mise à niveau manuelle de la version du moteur.

Une fois la mise à niveau de version majeure effectuée, nous vous recommandons d'effectuer les tâches suivantes :

  • Exécutez l'opération ANALYZE pour actualiser la table pg_statistic.

  • Une mise à niveau de PostgreSQL ne met à niveau aucune extension PostgreSQL. Pour mettre à niveau une extension, utilisez la commande ALTER EXTENSION UPDATE.

    Note

    Si vous exécutez l'extension PostGIS dans votre instance de base de données Amazon RDS PostgreSQL, veillez à respecter les instructions de mise à niveau PostGIS fournies dans la documentation PostGIS avant d'effectuer la mise à niveau de l'extension.

    Pour mettre à jour une extension, exécutez la commande suivante :

    ALTER EXTENSION extension_name UPDATE TO 'new_version'

    Pour voir la liste des versions prises en charge des extensions PostgreSQL, consultez Extensions et modules PostgreSQL pris en charge sur Amazon RDS.

  • Vous pouvez utiliser Amazon RDS pour afficher deux journaux produits par l'utilitaire pg_upgrade. Il s'agit des journaux pg_upgrade_internal.log et pg_upgrade_server.log. Amazon RDS ajoute un horodatage au nom de fichier de ces journaux. Vous pouvez consultez ces journaux comme tout autre journal. Pour de plus amples informations, veuillez consulter Fichiers journaux de base de données Amazon RDS.

    Vous pouvez également charger les journaux de mise à niveau dans Amazon CloudWatch Logs. Pour de plus amples informations, veuillez consulter Publication de journaux PostgreSQL dans CloudWatch Logs.

  • Pour vérifier si tout fonctionne comme prévu, testez votre application sur la base de données mise à niveau avec une charge de travail similaire. Une fois la mise à niveau vérifiée, vous pouvez supprimer l'instance de test.

Mises à niveau automatiques des versions mineures pour PostgreSQL

Si vous activez l'option Mise à niveau automatique des versions mineures au moment de créer ou modifier une instance de base de données, votre instance de base de données peut être mise à niveau automatiquement.

Pour chaque version majeure de RDS pour PostgreSQL, une seule version mineure est désignée par RDS comme étant la version de mise à niveau automatique. Une fois qu'une version mineure a été testée et approuvée par Amazon RDS, la mise à niveau de la version mineure se produit automatiquement pendant votre fenêtre de maintenance. RDS ne définit pas automatiquement les dernières versions mineures publiées comme version de mise à niveau automatique. Avant de désigner une publication de version récente comme version de mise à niveau automatique, RDS prend en compte plusieurs critères, à savoir :

  • Problèmes de sécurité connus

  • Bogues dans la version de la communauté PostgreSQL

  • Stabilité globale du parc depuis la publication de la version mineure

Vous pouvez utiliser le script et la commande AWS CLI ci-dessous pour déterminer quelles sont les versions mineures de mise à jour automatique actuelles.

aws rds describe-db-engine-versions --engine postgres | grep -A 1 AutoUpgrade| grep -A 2 true |grep PostgreSQL | sort --unique | sed -e 's/"Description": "//g'

Une instance de base de données PostgreSQL est automatiquement mise à niveau pendant votre fenêtre de maintenance si les critères suivants sont réunis :

  • L'option Mise à niveau automatique des versions mineures est activée pour l'instance de base de données.

  • L'instance de base de données exécute une version mineure du moteur de base de données qui est inférieure à la version mineure de la mise à niveau automatique actuelle.

Pour plus d'informations, consultez Mise à niveau automatique de la version mineure du moteur.

Une mise à niveau de PostgreSQL ne met à niveau aucune extension PostgreSQL. Pour mettre à jour une extension après une mise à niveau de version mineure, utilisez la commande ALTER EXTENSION UPDATE.

Note

Si vous exécutez l'extension PostGIS dans votre instance de base de données Amazon RDS PostgreSQL, veillez à respecter les instructions de mise à niveau PostGIS fournies dans la documentation PostGIS avant d'effectuer la mise à niveau de l'extension.

Par exemple, pour mettre à jour une extension, exécutez la commande suivante :

ALTER EXTENSION extension_name UPDATE TO 'new_version'

Pour voir la liste des versions prises en charge des extensions PostgreSQL, consultez Extensions et modules PostgreSQL pris en charge sur Amazon RDS.