Avant le début d'une mise à niveau majeure de la version moteur, ApsaraDB RDS for PostgreSQL exécute une vérification et génère un rapport. Le résultat de cette vérification détermine si la mise à niveau peut se poursuivre :
Les erreurs bloquent la mise à niveau : résolvez toutes les erreurs avant de relancer la procédure.
Les avertissements ne bloquent pas la mise à niveau, mais peuvent prolonger la durée en lecture seule ou entraîner un échec si les ressources sont insuffisantes.
Pour consulter le rapport de vérification, accédez à la page Major Version Upgrade dans la console, cliquez sur l'onglet Upgrade Check, puis cliquez sur View Information pour le rapport cible.
Le tableau suivant récapitule tous les modules de vérification et leur impact sur l'éligibilité à la mise à niveau.
| Module de vérification | Portée | Impact en cas de déclenchement |
|---|---|---|
| Avertissements | Tous les modes de mise à niveau | Ne bloque pas ; peut prolonger la durée en lecture seule ou provoquer un échec en cas de contraintes de ressources |
| Erreurs | Tous les modes de mise à niveau | Bloque la mise à niveau ; doit être résolu avant de réessayer |
| Journal des erreurs pg_upgrade | Tous les modes de mise à niveau | Inclus lorsque des erreurs sont détectées ; répertorie les extensions et mots-clés incompatibles |
| Incompatibilités de réplication logique | Mode zéro temps d'arrêt uniquement | Bloque le mode zéro temps d'arrêt si des objets incompatibles sont présents |
Rubriques connexes
Présentation des mises à niveau majeures de la version moteur
Mettre à niveau la version majeure du moteur en mode zéro temps d'arrêt
Mettre à niveau la version majeure du moteur en mode de déploiement bleu-vert
Mettre à niveau la version majeure du moteur en mode de mise à niveau locale
Avertissements
Les avertissements signalent des contraintes de ressources ou des conditions susceptibles de prolonger la durée en lecture seule ou de provoquer l'échec de la mise à niveau. Bien que la mise à niveau ne soit pas bloquée, il est recommandé de traiter les avertissements avant de commencer.
Contenu de la vérification
Le nombre d'objets de base de données influe sur la durée pendant laquelle l'instance reste en lecture seule durant la mise à niveau et détermine la mémoire et le stockage requis. Lorsque la vérification détecte un risque de pénurie de ressources, elle indique la Recommended memory capacity, la Recommended minimum memory capacity et la Recommended disk size dans l'onglet Upgrade Check.
Pour les mises à niveau zero-downtime, la vérification compte également les séquences, car la réplication logique ne peut pas synchroniser automatiquement les séquences ; elles nécessitent un bref basculement à la fin de la mise à niveau.
Recommended memory capacity Lorsque la mémoire de l'instance atteint ou dépasse cette valeur, le système met à niveau toutes les bases de données simultanément, ce qui minimise la durée en lecture seule.
Recommended minimum memory capacity Lorsque la mémoire de l'instance atteint ou dépasse cette valeur, la mise à niveau n'échouera pas par manque de mémoire. Toutefois, le système met à niveau les bases de données séquentiellement, ce qui prolonge la durée en lecture seule.
Recommended disk size Pendant la mise à niveau, le système duplique temporairement toutes les définitions d'objets, ce qui double approximativement la consommation d'inodes. Si l'espace de stockage disponible tombe en dessous de cette valeur, la mise à niveau risque d'échouer.
Vérification du nombre de tables de séquence (mode zéro temps d'arrêt uniquement) La réplication logique ne synchronise pas les séquences. Plus l'instance contient de séquences, plus le basculement prendra de temps à la fin d'une mise à niveau en mode zéro temps d'arrêt.
Avertissements et solutions
Avertissement relatif au disque
Format de l'avertissement : Total disk space: {*} GB; Used disk: {*} GB; Used inodes: {*}; bytes-per-nodes: {*}; Minimum disk space required for upgrade: {*} GB
Cause : L'instance contient trop d'objets ; le stockage actuel est insuffisant pour la mise à niveau.
Solution :
Mode de déploiement bleu-vert : Définissez la capacité de stockage de la nouvelle instance sur une valeur supérieure ou égale à l'espace disque minimal requis pour la mise à niveau.
Mode de mise à niveau locale : Augmentez la capacité de stockage de l'instance à une valeur supérieure ou égale à l'espace disque minimal requis pour la mise à niveau avant de commencer la procédure. Pour plus d'informations, consultez la rubrique Modifier la configuration.
Avertissement relatif à la mémoire
Format de l'avertissement : Current memory: {*} GB; Recommended memory: {*} GB; Minimum memory: {*} GB
Cause : L'instance contient trop d'objets ; la mémoire actuelle est insuffisante pour minimiser la durée en lecture seule pendant la mise à niveau.
Solution :
Mode de déploiement bleu-vert : Définissez la spécification de la nouvelle instance de sorte que sa mémoire atteigne ou dépasse l'exigence minimale de mémoire.
Mode de mise à niveau locale : Mettez à niveau la spécification de l'instance si la mémoire actuelle est inférieure à la capacité de mémoire recommandée. Pour plus d'informations, consultez la rubrique Modifier la configuration.
Avertissement relatif à l'abonnement
Format de l'avertissement : The instance has replication slot subscribers. To prevent subscription data inconsistency, see the Alibaba Cloud documentation
Cause : L'instance possède des abonnés aux slots de réplication. Exécutez la requête suivante pour vérifier :
SELECT * FROM pg_subscription;
Solution : Suivez les étapes décrites dans la rubrique Mettre à niveau la version majeure de la base de données pour gérer les abonnés aux slots de réplication.
Avertissement relatif aux séquences (mode zéro temps d'arrêt uniquement)
Format de l'avertissement : Total Sequence tables: {0}. Too many Sequence tables will extend the switchover time for logical replication major version upgrade.
Cause : L'instance contient des séquences. Exécutez la requête suivante pour les lister :
SELECT * FROM pg_sequences;
Solution : Si l'instance contient un grand nombre de séquences, clonez l'instance et effectuez une mise à niveau test pour mesurer le temps de basculement réel avant de mettre à niveau l'environnement de production.
Erreurs
Les erreurs bloquent la mise à niveau. Résolvez toutes les erreurs avant de relancer la vérification de mise à niveau.
Contenu de la vérification
Le système vérifie les conditions suivantes :
Comptes superutilisateur inutiles ou méthodes de chiffrement non valides configurées pour les comptes standard
Extensions ou mots-clés incompatibles avec la version majeure du moteur cible (enregistrés dans le journal des erreurs pg_upgrade)
Extension pgcrypto installée dans le schéma
pg_catalog(Mode zéro temps d'arrêt uniquement) Version mineure du moteur antérieure à 20250228
(Mode zéro temps d'arrêt uniquement) Objets de base de données incompatibles avec la réplication logique
Erreurs et solutions
Erreur de compte
Format de l'erreur : Invalid superuser account: {*}; Invalid account: {*}; Please see the Alibaba Cloud documentation
Cause : L'instance possède des comptes superutilisateur redondants ou des comptes standard avec des configurations de chiffrement non valides.
Solution :
Comptes superutilisateur redondants : Soumettez un ticket pour demander la suppression.
Comptes standard non valides : Réinitialisez les mots de passe des comptes concernés.
Erreur de pré-vérification
Format de l'erreur : pg_upgrade pre-check task failed, need to check [pg_upgrade error log] and [pg_upgrade-related files and errors]
Cause : La tâche de pré-vérification pg_upgrade a échoué.
Solution : Consultez la section du journal des erreurs pg_upgrade dans le rapport de vérification pour identifier et résoudre le problème spécifique.
Erreur d'extension pgcrypto
Format de l'erreur : The pg_crypto extension is installed in schema: pg_catalog in database: {*}, please see the Alibaba Cloud documentation
Cause : L'extension pgcrypto crée des fonctions dans pg_catalog qui n'existent que dans les versions ultérieures de PostgreSQL. Cela entraîne l'échec de la mise à niveau majeure de la version moteur.
Solution : Dans chaque base de données concernée, supprimez l'extension pgcrypto et recréez-la dans un schéma autre que pg_catalog.
Erreur de version mineure (mode zéro temps d'arrêt uniquement)
Format de l'erreur : Zero-downtime major version upgrade requires minimum minor version 20250228
Cause : La version mineure du moteur de l'instance est antérieure à 20250228.
Solution : Mettre à niveau la version mineure du moteur vers la version 20250228 ou ultérieure.
Journal des erreurs pg_upgrade
Contenu de la vérification
Le journal des erreurs pg_upgrade enregistre les extensions et les mots-clés SQL incompatibles avec la version majeure du moteur cible.
Erreurs courantes
loadable_libraries.txt : extensions incompatibles
Le fichier loadable_libraries.txt répertorie les fichiers de bibliothèque qui ne peuvent pas être chargés par la version cible de PostgreSQL. Chaque bibliothèque correspond généralement à une extension.
Cause : Une ou plusieurs extensions installées sont incompatibles avec la version majeure du moteur cible.
Solution : Vérifiez les extensions listées dans loadable_libraries.txt. Pour chaque extension, vérifiez si votre application en dépend, puis décidez s'il convient de la supprimer avant la mise à niveau. Pour la liste des extensions prises en charge dans chaque version, consultez la rubrique Extensions prises en charge.
Les sections suivantes décrivent les extensions incompatibles les plus courantes.
tables_with_oids.txt : tables avec OIDs
Le fichier tables_with_oids.txt répertorie les tables créées avec la déclaration WITH OIDS . PostgreSQL 12 et versions ultérieures ne prennent pas en charge WITH OIDS .
Cause : Une ou plusieurs tables utilisent la déclaration WITH OIDS , qui n'est pas prise en charge dans la version cible.
Solution :
Option 1 (recommandée) : Mettez à niveau vers PostgreSQL 11, qui prend toujours en charge
WITH OIDS.-
Option 2 : Examinez les tables listées dans
tables_with_oids.txtet confirmez que votre application ne dépend pas des valeurs OID. Exécutez ensuite l'instruction suivante pour chaque table concernée :ALTER TABLE {table_name} SET WITHOUT OIDS;
Incompatibilités de réplication logique (mode zéro temps d'arrêt uniquement)
Les mises à niveau majeures de la version moteur en mode zéro temps d'arrêt utilisent la réplication logique pour synchroniser les données de l'instance source vers l'instance cible. Certains objets de base de données ne sont pas pris en charge par la réplication logique. Si la vérification détecte l'un des éléments suivants, l'instance ne peut pas utiliser le mode zéro temps d'arrêt.
Contenu de la vérification
Le système vérifie :
Tables étrangères
Tables sans clé primaire ou unique
Vues matérialisées
Grands objets
Extensions interdites avec la réplication logique
Valeurs de paramètres ne répondant pas aux exigences de la réplication logique
Incompatibilités et solutions
Tables étrangères
Format de l'erreur : Foreign tables in database: {0}. Total databases: {1}
Cause : L'instance contient des tables étrangères, que la réplication logique ne peut pas répliquer.
Solution : Supprimez toutes les tables étrangères.
-
Dans chaque base de données, identifiez les tables étrangères :
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('f') GROUP BY relkind; -
Supprimez les tables étrangères :
DROP FOREIGN TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];
Pour plus d'informations, consultez la documentation PostgreSQL sur DROP FOREIGN TABLE.
Tables sans clé primaire ou unique
Format de l'erreur : Tables without primary key or unique key in database: {0}. Total databases: {1}
Cause : La réplication logique nécessite que chaque table dispose d'une clé primaire, d'une clé unique ou de REPLICA IDENTITY FULL pour identifier les lignes lors de la réplication.
Solution : Ajoutez une clé primaire ou unique à chaque table concernée, ou définissez REPLICA IDENTITY FULL .
-
Dans chaque base de données, identifiez les tables sans clé primaire ou unique :
SELECT COUNT(*) AS count FROM information_schema.tables t LEFT JOIN information_schema.table_constraints tc ON t.table_name = tc.table_name AND t.table_schema = tc.table_schema AND (tc.constraint_type = 'PRIMARY KEY' OR tc.constraint_type = 'UNIQUE') JOIN pg_class c ON t.table_name = c.relname JOIN pg_namespace ns ON c.relnamespace = ns.oid AND ns.nspname = t.table_schema WHERE t.table_type = 'BASE TABLE' AND tc.constraint_type IS NULL AND t.table_schema NOT IN ('pg_catalog', 'information_schema') AND c.relreplident != 'f'; -
Définissez
REPLICA IDENTITY FULLsur la table (si l'ajout d'une clé n'est pas réalisable) :ALTER TABLE name REPLICA IDENTITY FULL; -
Ou ajoutez une clé primaire ou unique :
-- Primary key ALTER TABLE name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name); -- Unique key ALTER TABLE name ADD CONSTRAINT constraint_name UNIQUE (column_name);
Pour plus d'informations, consultez la documentation PostgreSQL sur les contraintes uniques.
Vues matérialisées
Format de l'erreur : Materialized views in database: {0}. Total databases: {1}
Cause : La réplication logique ne peut pas répliquer les vues matérialisées.
Solution : Supprimez toutes les vues matérialisées.
-
Dans chaque base de données, identifiez les vues matérialisées :
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('m') GROUP BY relkind; -
Supprimez les vues matérialisées :
DROP MATERIALIZED VIEW IF EXISTS name;
Grands objets
Format de l'erreur : Large objects in database: {0}. Total databases: {1}
Cause : La réplication logique ne peut pas répliquer les grands objets stockés dans pg_largeobject .
Solution : Supprimez les grands objets.
La suppression des grands objets est irréversible. Avant d'exécuter l'instruction de suppression, vérifiez qu'aucune application ne référence ces objets. Effectuez cette opération pendant une fenêtre de maintenance et testez-la d'abord sur une instance hors production.
-
Dans chaque base de données, comptez les grands objets :
SELECT COUNT(*) AS count FROM pg_largeobject_metadata; -
Supprimez chaque grand objet :
SELECT lo_unlink(largeobject_oid);
Extensions interdites
Format de l'erreur : Logical replication prohibited extensions in database: {0}. Total databases: {1}
Cause : Les extensions suivantes sont incompatibles avec la réplication logique et ne doivent pas être présentes lors d'une mise à niveau en mode zéro temps d'arrêt : pg_partman , pg_cron , pg_active et pglogical .
Solution : Supprimez temporairement les extensions incompatibles.
-
Dans chaque base de données, vérifiez si des extensions interdites sont installées :
SELECT COUNT(*) AS count FROM pg_extension WHERE extname IN ('pg_partman', 'pg_cron', 'pg_active', 'pglogical'); -
Supprimez chaque extension interdite :
DROP EXTENSION extension_name;
Exigences de paramètres non satisfaites
Format de l'erreur : Logical replication requires wal_level to be logical, max_wal_sender and max_replication_slots to be at least {0}, instance wal_level is: {1}, max_wal_sender is: {2}, max_replication_slots is: {3}
Cause : Un ou plusieurs des paramètres suivants ne répondent pas aux exigences de la réplication logique : wal_level , max_wal_sender ou max_replication_slots .
Solution : Mettez à jour les valeurs des paramètres. Certaines modifications nécessitent un redémarrage pour prendre effet. Pour plus d'informations, consultez la rubrique Définir les paramètres d'une instance.