Error de actualización de PostgreSQL

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Síntoma

Recibirás un error cuando actualices la base de datos de PostgreSQL.

Mensaje de error

ERROR: PostgreSQL Upgrade FAILED 

Causas posibles

Causa Descripción Las instrucciones para la solución de problemas se aplican a
Configuración de replicación incorrecta en el archivo de configuración de PostgreSQL La actualización de PostgreSQL falla debido a que la configuración de replicación es incorrecta durante la actualización. Usuarios de la nube privada perimetral
Instalación de PostgreSQL realizada por otro usuario de instalación que no es el usuario de Apigee En un principio, PostgreSQL se instaló con otro usuario como usuario de instalación, lo que genera un error en la actualización. Usuarios de la nube privada perimetral

Pasos comunes del diagnóstico

Si recibes un error cuando actualizas la base de datos de PostgreSQL, primero realiza los siguientes pasos de diagnóstico:

  1. Cambia el nombre de la carpeta de datos de PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Asegúrate de que los datos de la copia de seguridad original estén en una carpeta llamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Por ejemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restablece los datos de copia de seguridad en /opt/apigee/data/apigee-postgresql/pgdata-version.old/ a /opt/apigee/data/apigee-postgresql/pgdata con el siguiente comando:

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

    Por ejemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Vuelve a ejecutar el comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Si recibes el siguiente error...

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

    Luego, cambia el nombre del archivo pg_control.old a pg_control con el siguiente comando:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Vuelve a ejecutar el comando db_upgrade:

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

    Si el problema persiste, ve a Causa: Configuración de replicación incorrecta en el archivo de configuración de PostgreSQL.

Causa: Configuración de replicación incorrecta en el archivo de configuración de PostgreSQL

Diagnóstico

  1. Verifica si el archivo de configuración de PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf tiene la configuración de replicación que deseas.
  2. Si este archivo tiene la configuración de replicación esperada, ve a Instalación de PostgreSQL realizada por otro usuario de instalación que no sea el usuario de “apigee”.
  3. De lo contrario, ve a Resolución.

Solución

  1. Cambia el nombre de la carpeta de datos de PostgreSQL con el siguiente comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Asegúrate de que los datos de la copia de seguridad original estén en una carpeta con el nombre /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Por ejemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restablece los datos de copia de seguridad de /opt/apigee/data/apigee-postgresql/pgdata-version.old/ a /opt/apigee/data/apigee-postgresql/pgdata con el siguiente comando:

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

    Por ejemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Si alguna vez cambiaste el host secundario, debes actualizar la siguiente propiedad en /opt/apigee/customer/application/postgresql.properties para actualizar el archivo de configuración 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. Reinicia el servicio apigee-postgresql para asegurarte de que la propiedad establecida en el paso 4 anterior se actualice en el archivo de configuración pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Haz que el archivo de configuración pg_hba.conf sea inmutable mediante el siguiente comando para asegurarte de que no se actualice con una configuración incorrecta durante la actualización de PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Vuelve a ejecutar el comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Quita el parámetro de configuración inmutable del archivo de configuración pg_hba.conf:

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

Causa: otro usuario de instalación que no es el usuario apigee realizó la instalación de PostgreSQL

Diagnóstico

  1. Sigue estos pasos para verificar si hay algún otro usuario que tenga rolesuper configurado como true:

    1. En el nodo de PostgreSQL, accede a PostgreSQL con el siguiente comando:

      psql -h $(hostname -i)  -U apigee
      
    2. Ejecuta la siguiente consulta en SQL:

      select * from pg_authid;
      
    3. Verifica si hay varios usuarios que tengan rolesuper configurado como true. Si los hay, significa que la actualización de PostgreSQL falla porque otro usuario se configuró como usuario de instalación en lugar del usuario de apigee. Cualquier usuario con la función rolesuper y un OID más bajo se considera un usuario que realiza la instalación.

      Para verificar este tipo de problema de función, ejecuta las siguientes consultas en SQL:

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

Solución

  1. Accede a PostgreSQL con el siguiente comando:

    psql -h $(hostname -i)  -U apigee
    
  2. Cambia el nombre del rol apigee existente en la base de datos anterior a un usuario temporal (por ejemplo: apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Supongamos que hubo otro usuario de instalación srcapige. Cambia el nombre de la función srcapige a apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Cambia el nombre de apigee2 por el usuario srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Actualiza la contraseña para todos los usuarios a los que les cambiaste el nombre:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Cambia el nombre de la carpeta de datos de PostgreSQL con el siguiente comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Asegúrate de que haya datos de copia de seguridad originales dentro de una carpeta llamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Por ejemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Restablece los datos de la carpeta /opt/apigee/data/apigee-postgresql/pgdata-version.old/ a /opt/apigee/data/apigee-postgresql/pgdata con el siguiente comando:

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

    Por ejemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Vuelve a ejecutar el comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Reinicia todos los servicios de apigee-qpidd y 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 el problema persiste, consulta Recopila información de diagnóstico.

Se debe recopilar información de diagnóstico

Si el problema persiste después de seguir las instrucciones para solucionar problemas anteriores, obtén la siguiente información de diagnóstico. Comunícate con el equipo de asistencia de Apigee y comparte esta información con el equipo de asistencia al cliente:

  1. Agrega set -x en la segunda línea del archivo /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Sigue los pasos comunes de diagnóstico y proporciona el resultado de la consola del comando db_upgrade al equipo de asistencia al cliente:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Proporciona los siguientes archivos de registro al equipo de asistencia al cliente:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Proporciona el resultado de los siguientes comandos del sistema operativo para verificar si las alternativas están configuradas en auto.

    update-alternatives --display psql 
    

    O

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

    O

    update-alternatives --list pgsql
    

    Si las alternativas se configuran como manual, puedes establecerlas en auto con el siguiente comando:

    update-alternatives --auto psql
    

    Cuando se establecen las alternativas para auto, se apuntan los objetos binarios psql y postgres a las versiones actualizadas. De lo contrario, los objetos binarios apuntarán a la versión anterior, lo que puede causar problemas.