Échec de la mise à niveau de PostgreSQL

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la documentation sur Apigee X.
info

Symptôme

Un message d'erreur s'affiche lors de la mise à jour de la base de données PostgreSQL.

Message d'erreur

ERROR: PostgreSQL Upgrade FAILED 

Causes possibles :

Cause Description Les instructions de dépannage s'appliquent aux éléments suivants :
Paramètres de réplication incorrects dans le fichier de configuration PostgreSQL La mise à niveau de PostgreSQL échoue en raison de paramètres de réplication incorrects lors de la mise à niveau. Utilisateurs du cloud privé Edge
Installation de PostgreSQL effectuée par un autre utilisateur que l'utilisateur Apigee PostgreSQL a été installé initialement avec un autre utilisateur en tant qu'utilisateur d'installation, ce qui entraîne l'échec de la mise à niveau. Utilisateurs du cloud privé Edge

Étapes de diagnostic courantes

Si vous recevez une erreur lors de la mise à niveau de la base de données PostgreSQL, procédez d'abord aux étapes de diagnostic suivantes :

  1. Renommez le dossier de données PostgreSQL :

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Assurez-vous que vos données de sauvegarde d'origine se trouvent dans un dossier nommé /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Exemple :

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaurez les données de sauvegarde de /opt/apigee/data/apigee-postgresql/pgdata-version.old/ dans /opt/apigee/data/apigee-postgresql/pgdata à l'aide de la commande suivante :

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemple :

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Exécutez à nouveau la commande db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Si vous obtenez l'erreur suivante :

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    Remplacez le nom du fichier pg_control.old par pg_control à l'aide de la commande suivante:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Réexécutez la commande db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

    Si le problème persiste, consultez Cause: paramètres de réplication incorrects dans le fichier de configuration PostgreSQL.

Cause : Paramètres de réplication incorrects dans le fichier de configuration PostgreSQL

Diagnostic

  1. Vérifiez si le fichier de configuration PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf dispose des paramètres de réplication souhaités.
  2. Si ce fichier possède les paramètres de réplication attendus, accédez à l'installation de PostgreSQL effectuée par un autre utilisateur que "apigee" utilisateur.
  3. Sinon, passez à Résolution.

Solution

  1. Renommez le dossier de données PostgreSQL à l'aide de la commande suivante:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Assurez-vous que les données de sauvegarde d'origine se trouvent dans un dossier nommé /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Exemple :

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaurez les données de sauvegarde de /opt/apigee/data/apigee-postgresql/pgdata-version.old/ dans /opt/apigee/data/apigee-postgresql/pgdata à l'aide de la commande suivante:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemple :

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Si vous avez déjà changé d'hôte esclave, vous devez mettre à jour la propriété suivante dans /opt/apigee/customer/application/postgresql.properties pour mettre à jour le fichier de configuration pg_hba.conf:

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. Redémarrez le service apigee-postgresql pour vous assurer que la propriété définie à l'étape 4 ci-dessus est mise à jour dans le fichier de configuration pg_hba.conf :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Rendez le fichier de configuration pg_hba.conf immuable en exécutant la commande suivante : assurez-vous qu'il n'est pas mis à jour avec des paramètres incorrects lors de la mise à niveau de PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Exécutez à nouveau la commande db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Supprimez le paramètre immuable du fichier de configuration pg_hba.conf:

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

Cause: installation de PostgreSQL effectuée par un autre utilisateur que l'utilisateur apigee

Diagnostic

  1. Vérifiez si la valeur rolesuper est true pour un autre utilisateur en en procédant comme suit:

    1. Sur le nœud PostgreSQL, connectez-vous à PostgreSQL à l'aide de la commande suivante :

      psql -h $(hostname -i)  -U apigee
      
    2. Exécutez la requête SQL suivante :

      select * from pg_authid;
      
    3. Vérifiez si plusieurs utilisateurs ont défini rolesuper sur true. Si c'est le cas, cela signifie que la mise à niveau de PostgreSQL échoue, car un autre utilisateur a été défini comme utilisateur de l'installation au lieu de l'utilisateur apigee. Tout utilisateur disposant du rolesuper et un OID inférieur est considéré comme un utilisateur ayant installé l'application.

      Pour vérifier ce type de problème de rôle, exécutez les requêtes SQL suivantes:

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

Solution

  1. Connectez-vous à PostgreSQL à l'aide de la commande suivante :

    psql -h $(hostname -i)  -U apigee
    
  2. Renommez le rôle apigee existant dans l'ancienne base de données en utilisateur temporaire (par exemple, apigee2) :

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Imaginons qu'il y ait un autre utilisateur ayant installé l'application srcapige. Renommez le rôle srcapige en apigee :

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Renommez apigee2 en srcapige :

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Mettez à jour le mot de passe de tous les utilisateurs renommés :

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Renommez le dossier de données PostgreSQL à l'aide de la commande suivante:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Assurez-vous que des données de sauvegarde d'origine se trouvent dans un dossier nommé /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Exemple :

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Restaurez les données du dossier /opt/apigee/data/apigee-postgresql/pgdata-version.old/ dans /opt/apigee/data/apigee-postgresql/pgdata à l'aide de la commande suivante :

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemple :

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Exécutez à nouveau la commande db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Redémarrez tous les services apigee-qpidd et edge-qpid-server :

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

Si le problème persiste, consultez la page Vous devez collecter des informations de diagnostic.

Vous devez collecter des informations de diagnostic

Si le problème persiste après avoir suivi les instructions de dépannage ci-dessus, rassemblez les informations de diagnostic suivantes. Contactez l'assistance Apigee et partagez les informations suivantes avec l'équipe d'assistance :

  1. Ajoutez set -x sur la deuxième ligne du fichier /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Suivez les étapes de diagnostic courantes et indiquez le la sortie de la console de la commande db_upgrade à l'équipe d'assistance:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Transmettez les fichiers journaux suivants à l'équipe d'assistance:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Fournissez le résultat des commandes suivantes du système d'exploitation pour vérifier si les alternatives sont définies sur auto.

    update-alternatives --display psql 
    

    OU

    update-alternatives --display pgsql
    update-alternatives --list psql
    

    OU

    update-alternatives --list pgsql
    

    Si les alternatives sont définies sur manual, vous pouvez les définir sur auto à l'aide des éléments suivants : commande:

    update-alternatives --auto psql
    

    Définir les alternatives sur auto redirige les binaires psql et postgres vers les versions mises à niveau. Sinon, les binaires pointeront vers l’ancienne version, ce qui peut causer des problèmes.