Mise à niveau vers une nouvelle version majeure
Databases for PostgreSQL propose trois options de mise à niveau différentes :
- Mise à niveau sur place vers une nouvelle version majeure.
- Restauration à partir d'une sauvegarde.
- Mise à niveau à partir d'une réplique en lecture seule.
Lorsqu'une version majeure d'une base de données approche de sa fin de vie (EOL), il est conseillé de passer à la version majeure actuelle.
Vous trouverez les versions disponibles d' Databases for PostgreSQL sur la page du catalogue IBM Cloud, via la commande du plug-in CLI Cloud Databases ibmcloud cdb deployables-show, ou via le point de terminaison de l'API Cloud Databases /deployables.
Lorsque vous passez à une nouvelle instance, vous devez également modifier les informations de connexion dans votre application.
Dans les exemples de commandes ci-dessous, le CRN complet de l'instance de base de données est requis pour la commande « {id} ». Le CRN contenant des caractères spéciaux, il doit être encodé selon la norme « URL » afin d'éviter une erreur « not_found ».
Conditions requises pour passer à une version majeure plus récente d' PostgreSQL
Avant d'entamer toute mise à niveau vers une version majeure, vérifiez toutes les extensions, les objets de réplication et les dépendances d'application qui doivent être conservés en priorité.
Certaines extensions et certains objets de réplication logique sont spécifiques à une version ou dépendent de composants côté serveur qui doivent correspondre à la version majeure d' PostgreSQL. Leur suppression avant la mise à niveau permet d'éviter les défaillances et vous permet de recréer uniquement les objets pris en charge une fois la nouvelle version opérationnelle.
Extensions et objets de réplication logique à examiner
Veuillez vérifier les points suivants avant la mise à niveau :
Extensions
pg_repackold_snapshotwal2jsonanonPostGIS
Emplacements de réplication
Logical replication slots
Dépendances des applications Si vous supprimez des extensions ou des objets de réplication dont dépendent vos applications, vérifiez vos flux de données et le comportement de vos applications avant de poursuivre la mise à niveau. Pensez également aux éventuelles perturbations qui pourraient affecter la logique de votre application si celle-ci dépend de fonctionnalités spécifiques d’ PostgreSQL.
pg_repack
Supprimez le répertoire « pg_repack » avant la mise à niveau, puis recréez-le après celle-ci. Le répertoire « pg_repack » utilise une extension spécifique à la version ainsi que des composants client/serveur qui doivent
correspondre à la version majeure de « PostgreSQL ».
DROP EXTENSION pg_repack;
Ne recréez l'extension après la mise à niveau que si votre charge de travail en a toujours besoin.
CREATE EXTENSION pg_repack;
old_snapshot
Supprimez la table « old_snapshot » avant la mise à niveau. Ne pas le recréer après la mise à niveau vers la version 18 d' PostgreSQL, car il n'est plus pris en charge.
DROP EXTENSION old_snapshot;
wal2json emplacements de réplication
Si vous utilisez « wal2json » pour le décodage logique, vous devez supprimer tous les emplacements de réplication associés avant la mise à niveau. L'utilitaire « pg_upgrade » interdit formellement les mises à niveau
vers une version majeure tant que des emplacements de réplication existent; il générera une erreur critique et interrompra la mise à niveau.
Avant la mise à jour :
- Assurez-vous que toutes les données WAL en attente ont bien été traitées.
- Arrêtez l'application qui utilise l'emplacement de réplication.
- Supprimer le ou les emplacements de réplication :
SELECT pg_drop_replication_slot('your_slot_name');
Une fois la mise à niveau effectuée, vous pourrez recréer les emplacements de réplication selon vos besoins. Notez que « wal2json » n'est pas installé via CREATE EXTENSION, mais qu'il est configuré à l'aide de paramètres
de base de données (wal_level, max_replication_slots, max_wal_senders) et d'autorisations sur les tables, ce qui n'empêche pas les mises à jour.
anon
Désinstallez l'extension « anon » avant la mise à jour, puis réactivez-la après celle-ci si vous en avez encore besoin. Il faut effectuer quelques étapes supplémentaires avant de désinstaller anon.
Si l'extension « anon » est installée, suivez les étapes ci-dessous et exécutez les commandes en tant qu'utilisateur « admin » avant de procéder à la mise à jour.
-
Supprimez toutes les règles de masquage (si elles sont activées).
SELECT anon.remove_masks_for_all_columns(); -
Désactivez les rôles masqués (la mise à niveau risque d'échouer si certains rôles sont marqués comme masqués).
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL; -
Désactivez l'extension «
anon» avec l'option « cascade ».DROP EXTENSION anon CASCADE; -
Si l'extension «
anon» est installée dans plusieurs bases de données au sein d'une même instance, suivez les étapes décrites pour chacune d'entre elles. -
Une fois la mise à jour terminée, réactivez l'extension «
anon» et réappliquez les règles de masquage si nécessaire.
Il est vivement recommandé de valider les données avant et après la suppression de l'extension afin de s'assurer de la cohérence du masquage avant de procéder à la mise à niveau.
PostGIS
Si vous utilisez PostGIS,, procédez d'abord à la mise à jour de PostGIS avant de mettre à jour PostgreSQL.
SELECT postgis_extensions_upgrade();
Utilisez la requête suivante pour vérifier la mise à jour de l'extension « PostGIS ».
SELECT postgis_full_version();
Logical replication slots
Supprimez tous les emplacements de réplication logique avant la mise à niveau, puis recréez-les après celle-ci. Les emplacements logiques sont liés à l'état du serveur source et doivent être recréés à partir de zéro sur l'instance mise à niveau.
SELECT pg_drop_replication_slot('<slot_name>');
Mises à niveau majeures de version sans interruption
Une mise à niveau majeure sur place (IPU) vous permet de mettre à niveau votre déploiement vers une version prise en charge /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions sans avoir à restaurer une sauvegarde dans un nouveau déploiement. La mise à niveau conserve les chaînes de connexion existantes; aucune reconfiguration n'est donc nécessaire.
Toutefois, des modifications de l'application pourraient s'avérer nécessaires si la nouvelle version présente des problèmes de compatibilité.
Pendant la période de mise à niveau, votre déploiement subit une brève interruption de service. La durée dépend de la taille et de la complexité de votre déploiement.
Si vos applications doivent continuer à lire des données pendant la mise à niveau, vous pouvez provisionner une réplique en lecture seule (voir /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision) et mettre à jour votre application pour qu'elle utilise cette réplique. Vous pouvez promouvoir la réplique au statut de serveur principal si la mise à niveau ne s'achève pas correctement. Pour plus d'informations, consultez /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu.
Databases for PostgreSQL ne crée pas automatiquement de sauvegardes avant ou après une mise à niveau majeure sur place.
Pour améliorer la récupérabilité, créez :
- Une sauvegarde avant la mise à niveau afin de protéger l'état actuel de vos données
- Une sauvegarde à effectuer immédiatement après la mise à niveau afin de créer le premier point de restauration pour la nouvelle version
Si vous n'effectuez pas de sauvegarde après la mise à niveau, la restauration à un instant donné (PITR) ne sera pas disponible pour la nouvelle version tant que la prochaine sauvegarde planifiée n'aura pas été effectuée.
Les sauvegardes et les points PITR créés avant la mise à niveau restent associés à la version antérieure et ne peuvent pas être restaurés dans la version mise à niveau. Toutefois, elles peuvent toujours être utilisées pour restaurer la version antérieure dans un nouveau déploiement.
Emplacements de réplication logique
Supprimez tous les emplacements de réplication logique avant la mise à niveau, puis recréez-les après celle-ci. Les emplacements de réplication logique sont liés à l'état du serveur source et doivent être recréés sur l'instance mise à niveau.
SELECT pg_drop_replication_slot('<slot_name>');
Avant de commencer
Veuillez vérifier les points suivants avant de lancer la mise à niveau :
-
Vérifiez que les mises à jour de version sont prises en charge pour votre déploiement à l'aide de l'interface utilisateur, de l'API, de l'interface de ligne de commande ou de Terraform.
Exemple (interface en ligne de commande):
ibmcloud cdb capability-show versions postgresql -
Vérifiez les conditions préalables à la vérification. La mise à niveau s'effectue sur le déploiement source et est bloquée si des risques sont détectés. Veillez à ce que :
- Le déploiement se déroule sans problème
- Au moins 10 % d'espace disque libre est disponible
- Le taux d'utilisation des E/S est inférieur à 90 %
- La taille du schéma et le nombre d'objets se situent dans les limites autorisées
- Le nettoyage requis des extensions et des emplacements de réplication logique est terminé
-
Consultez le document « https://www.postgresql.org/docs/release/ » pour prendre connaissance des modifications de compatibilité susceptibles d'affecter vos applications.
-
Le retour à une version antérieure n'est pas pris en charge.
-
Une mise à niveau sur place ne peut pas être annulée une fois qu'elle a commencé.
-
Assurez-vous de disposer d'une sauvegarde récente avant de procéder à la mise à jour.
| Source : version de l' PostgreSQL | Cible de mise à niveau sur place prise en charge |
|---|---|
| 18 | Prochaines versions majeures (lorsqu'elles seront disponibles) |
Gen2 commence à la page 18 d' PostgreSQL. Les procédures de mise à niveau vers les versions plus récentes sont ajoutées au fur et à mesure qu'elles sont prises en charge. Pour les versions antérieures (14 à 17), consultez la page /docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading.
Une fois la mise à niveau terminée, votre déploiement fonctionnera sous une nouvelle version majeure d' PostgreSQL. Les sauvegardes et les points PITR antérieurs à la mise à niveau relèvent de la chronologie de la version précédente et ne peuvent pas être restaurés dans la version mise à niveau.
Pour conserver les fonctionnalités de restauration et de PITR dans la nouvelle version, effectuez une sauvegarde immédiatement après la mise à niveau. Cette sauvegarde sert de référence pour les futures opérations de restauration.
Si la mise à niveau échoue, les sauvegardes effectuées avant celle-ci peuvent toujours être utilisées avec PITR pour restaurer la version antérieure dans un nouveau déploiement.
Mise à niveau via l'interface utilisateur
-
Créez un déploiement de test en restaurant une sauvegarde de votre déploiement existant, qui doit être de la même version.
-
Mettez à jour votre application de préproduction pour utiliser le déploiement de test et validez son fonctionnement.
-
Lancez la mise à niveau depuis la page « Aperçu » en cliquant sur « Mise à niveau vers une version majeure ».
-
Vérifiez le comportement de l'application sur l'environnement de test mis à niveau.
-
Mettez à jour votre déploiement en production une fois la validation terminée.
Une fois la mise à niveau lancée, il n'est plus possible de l'arrêter ni de revenir en arrière. Assurez-vous de disposer d'une sauvegarde récente.
Le délai d'expiration pour le lancement de la mise à niveau définit dans quel délai la tâche de mise à niveau doit démarrer avant d'être automatiquement annulée. Définissez cette valeur en fonction de votre créneau de maintenance. Par exemple, si la mise à jour dure 30 minutes et que votre fenêtre est d'une heure, définissez l'expiration sur 30 minutes. La durée de validité peut varier entre 5 minutes et 24 heures.
Mise à niveau via l'API
Utilisez la requête suivante pour lancer une mise à niveau sur place :
curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"version": "15"}'
Pour plus d'informations, consultez l'API « Cloud Databases ».
Mise à niveau via l'interface de ligne de commande
Disponible dans la version du plugin CDB >= 0.20.0.
Pour consulter les options de mise à niveau disponibles :
ibmcloud cdb deployment-capability-show <NAME|CRN> versions
Pour lancer une mise à jour :
ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>
Pour plus de détails sur la commande :
ibmcloud cdb deployment-version-upgrade --help
Utilisez soit --expire-in, soit --expire-at pour définir la durée d'expiration.
Mise à niveau via Terraform
Disponible dans la version du fournisseur Terraform >= 1.79.2.
Pour effectuer la mise à niveau, modifiez la valeur « version » dans votre configuration.
Si vous ne procédez pas à une sauvegarde avant une mise à niveau, cela peut entraîner une perte de données en cas d'échec de la mise à niveau. Assurez-vous de disposer d'une sauvegarde récente.
Augmentez le délai d'expiration si nécessaire, car Terraform utilise des délais d'expiration plutôt que des horodatages d'expiration.
Traitement des incidents
Si des problèmes surviennent après une mise à jour réussie et que vous devez revenir à la version précédente, contactez le service d'assistance de IBM Cloud® pour obtenir de l'aide. Évitez d'effectuer des opérations PITR ou des restaurations sans assistance, car cela peut compliquer la récupération.
Les mises à niveau ne sont exécutées qu'une fois que toutes les vérifications préalables ont abouti. Si la mise à jour est bloquée, vérifiez les points suivants :
- État du cluster (état de Patroni : stable)
- Espace disque libre suffisant
- Utilisation acceptable des E/S disque
- Limites relatives à la taille des schémas et au nombre d'objets
Les schémas volumineux et le nombre élevé d'objets peuvent allonger la durée de la mise à niveau.
Si les tentatives de mise à jour échouent toujours, ouvrez un ticket d'assistance via https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter.
Mise à niveau à partir d'une réplique accessible en lecture seule
Effectuez la mise à niveau en configurant une réplique en lecture seule. Créez une réplique en lecture seule avec la même version de base de données
que votre déploiement, puis attendez que toutes vos données y soient répliquées. Une fois que votre déploiement et sa réplique sont synchronisés, faites passer la réplique en lecture seule au statut de déploiement autonome complet exécutant
la nouvelle version de la base de données. Pour effectuer l'étape de mise à niveau et de promotion, envoyez une requête POST vers le point /deployments/{id}/remotes/promotion de terminaison en indiquant dans le corps de la requête la version vers laquelle vous souhaitez effectuer la mise à niveau.
Cette requête se présente comme suit :
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false
}
}' \
Le paramètre skip_initial_backup est facultatif. Si la valeur est true, le nouveau déploiement n'effectue pas de sauvegarde initiale lorsque la promotion est terminée. Votre nouveau déploiement est disponible plus rapidement.
L'inconvénient est qu'il n'est pas sauvegardé jusqu’à la sauvegarde automatique suivante ou une sauvegarde à la demande.
Exécution-test de la promotion et de la mise à niveau
Pour évaluer les effets des mises à niveau vers une nouvelle version majeure, lancez un test de simulation. Une simulation permet de reproduire la promotion et la mise à niveau, les résultats étant consignés dans les journaux de la base de données. Accédez à vos journaux de base de données et consultez-les grâce à l'intégration « Analyse des journaux ». Cela garantit que la version que vous utilisez actuellement, avec ses extensions, pourra être mise à niveau sans problème vers la version souhaitée.
Pour effectuer l'exécution-test, vous devez définir skip_initial_backup sur false, et vous devez définir version.
La commande se présente comme suit :
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false,
"dry_run": true
}
}' \
Sauvegarde et restauration de la mise à niveau
Vous pouvez mettre à niveau la version de votre base de données en restaurant une sauvegarde de vos données dans un nouveau déploiement fonctionnant sous la nouvelle version de la base de données.
Mise à niveau via l'interface utilisateur
Effectuez la mise à jour vers une nouvelle version lorsque vous restaurez une sauvegarde à partir du menu « Sauvegardes » de votre tableau de bord de déploiement. Cliquez sur « Restaurer » sur une sauvegarde pour accéder à la page de provisionnement dans un nouvel onglet, où vous pourrez modifier certaines options pour le nouveau déploiement. L'une des options est la version de la base de données, qui est automatiquement renseignée avec les versions disponibles vers lesquelles vous pouvez effectuer une mise à niveau. Sélectionnez une version, puis cliquez sur Créer pour lancer le processus de provisionnement et de restauration.
Mise à niveau via l'interface de ligne de commande
Pour effectuer une mise à niveau et une restauration à partir d'une sauvegarde via l'interface CLI d' IBM Cloud, utilisez la commande de provisionnement du contrôleur de ressources.
ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>
Les paramètres service-name, service-id, service-plan-id et region sont tous obligatoires. Vous fournissez également l'option -p avec les paramètres de version et d'ID de sauvegarde
dans un objet JSON. Le nouveau déploiement est automatiquement dimensionné avec la même taille de disque et de mémoire que le déploiement source au moment de la sauvegarde.
Cette commande se présente comme suit :
ibmcloud resource service-instance-create example-upgrade databases-for-postgresql standard us-south \
-p \ '{
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
Mise à niveau via l'API
Effectuez les étapes nécessaires à l'utilisation de l'API du contrôleur de ressources avant de l'utiliser pour effectuer une
mise à niveau à partir d'une sauvegarde. Ensuite, envoyez une requête POST à l'API. Les paramètres name, target, resource_group et resource_plan_id sont tous obligatoires.
Vous fournissez également la version et l'ID de sauvegarde. Le nouveau déploiement possède la même allocation de mémoire et de disque que le déploiement source au moment de la sauvegarde.
Cette commande se présente comme suit :
curl -X POST \
https://resource-controller.cloud.ibm.com/v2/resource_instances \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"name": "my-instance",
"target": "bluemix-us-south",
"resource_group": "5g9f447903254bb58972a2f3f5a4c711",
"resource_plan_id": "databases-for-postgresql-standard",
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
Mise à niveau forcée
Passé la date de fin de vie, tous les déploiements actifs d’ Databases for PostgreSQL qui utilisent une version obsolète sont automatiquement mis à niveau vers la version prise en charge suivante. Par exemple, la version 13 d' PostgreSQL (obsolète) est mise à niveau vers la version 14.
Effectuez la mise à niveau avant la date de fin de vie afin d'éviter les risques suivants :
- Aucun accord de niveau de service (SLA) n'est prévu pour ce type de mise à niveau forcée.
- Il se peut que vous subissiez une perte de données.
- Votre application pourrait subir une interruption de service prolongée.
- Votre application risque de ne plus fonctionner si elle n'est pas compatible avec la nouvelle version.
- Vous ne pouvez pas déterminer à quel moment cette mise à niveau sera effectuée pour votre déploiement.
- Il n'existe aucun processus de restauration pour cette mise à niveau forcée.
Pour connaître les dates de fin de vie, consultez le site page relative à la politique de version.
Problèmes liés aux privilèges des rôles lors des mises à niveau de version
À partir d' PostgreSQL e 16, l'application des privilèges liés aux rôles est plus stricte. Il s'agit d'un changement architectural en amont d' PostgreSQL, et non d'un changement de comportement spécifique à IBM®. Dans les versions antérieures,
les rôles dotés de l'attribut « CREATEROLE » pouvaient gérer d'autres rôles de manière plus étendue. Dans PostgreSQL, version 16 et ultérieures, un rôle doit disposer du droit « ADMIN OPTION » (Droit de gestion) sur
un autre rôle pour pouvoir l’attribuer ou le retirer. Pour plus d'informations, consultez les notes de mise à jour de la version 16 d' PostgreSQL,
les attributs des rôles et l' GRANT s sur les rôles.
Si vous effectuez une mise à niveau depuis la version 15 d’ PostgreSQL, ou une version antérieure, vers la version 16 d’ PostgreSQL, ou une version ultérieure, vérifiez les autorisations associées à vos rôles avant de lancer la mise à niveau sur place (IPU). Si la gestion des rôles doit se poursuivre après la mise à niveau, veillez à ce que les rôles requis soient attribués avec l'option WITH ADMIN OPTION avant de lancer la mise à niveau.
Si vous rencontrez des erreurs liées aux droits d'accès après la mise à niveau, par exemple :
ERROR: only roles with the ADMIN OPTION on role "some_role" may grant this role
DETAIL: role "admin" is not permitted to grant role "some_role"
Utilisez la fonction d'aide intégrée grant_admin_option_to_roles pour rétablir l' ADMIN OPTION s pour des rôles spécifiques :
- S'applique uniquement aux bases de données mises à niveau depuis PostgreSQL v15 et les versions antérieures vers PostgreSQL 16 et versions ultérieures (si vous rencontrez l'erreur décrite ci-dessus).
- Accepte une liste arbitraire de rôles auxquels appliquer le correctif.
- Ne peut être exécuté que par l'
admin user. - Son exécution peut être répétée sans risque (elle est idempotente).
Exemple de syntaxe :
SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');
Cette fonction attribue les rôles spécifiés (role1, role2, role3) à l'utilisateur admin disposant de l'autorisation ADMIN OPTION, ce qui permet à l'utilisateur admin de gérer (attribuer, révoquer, modifier ou supprimer) ces rôles dans les instances mises à niveau.
Journal des modifications des versions PostgreSQL principales
Pour plus d'informations sur les versions antérieures d' PostgreSQL (14 à 17), consultez le journal des modifications de Gen1.