Falha no upgrade do PostgreSQL

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

Você recebe um erro ao atualizar o banco de dados PostgreSQL.

Mensagem de erro

ERROR: PostgreSQL Upgrade FAILED 

Causas possíveis

Causa Descrição As instruções de solução de problemas se aplicam a
Configurações de replicação incorretas no arquivo de configuração do PostgreSQL O upgrade do PostgreSQL falha devido a configurações de replicação incorretas durante o processo. Usuários da nuvem privada do Edge
Instalação do PostgreSQL realizada por outro usuário de instalação que não seja o usuário do Apigee O PostgreSQL foi instalado inicialmente com outro usuário como usuário de instalação, o que causa falha no upgrade. Usuários da nuvem privada do Edge

Etapas comuns do diagnóstico

Se você receber um erro ao fazer upgrade do banco de dados PostgreSQL, siga estas etapas de diagnóstico primeiro:

  1. Renomeie a pasta de dados do PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Verifique se os dados de backup originais estão em uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaure os dados de backup em /opt/apigee/data/apigee-postgresql/pgdata-version.old/ para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

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

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Se você receber o seguinte erro...

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

    ...em seguida, renomeie o arquivo pg_control.old para pg_control usando o seguinte comando:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Execute novamente o comando db_upgrade:

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

    Se o problema persistir, acesse Causa: configurações de replicação incorretas no arquivo de configuração do PostgreSQL.

Causa: configurações de replicação incorretas no arquivo de configuração do PostgreSQL

Diagnóstico

  1. Verifique se o arquivo de configuração do PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf tem as configurações de replicação desejadas.
  2. Se esse arquivo tiver as configurações de replicação esperadas, acesse Instalação do PostgreSQL realizada por outro usuário de instalação que não seja o usuário "apigee".
  3. Caso contrário, acesse Resolução.

Resolução

  1. Renomeie a pasta de dados do PostgreSQL usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Verifique se os dados de backup originais estão em uma pasta chamada: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaure os dados de backup de /opt/apigee/data/apigee-postgresql/pgdata-version.old/ para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

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

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Se você já mudou o host escravo, atualize a seguinte propriedade em /opt/apigee/customer/application/postgresql.properties para atualizar o arquivo de configuração 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. Reinicie o serviço apigee-postgresql para garantir que a propriedade definida na Etapa 4 acima seja atualizada no arquivo de configuração pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Use o comando a seguir para tornar o arquivo de configuração pg_hba.conf imutável e garantir que ele não seja atualizado com configurações incorretas durante o upgrade do PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Remova a configuração imutável no arquivo de configuração pg_hba.conf:

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

Causa: instalação do PostgreSQL realizada por outro usuário de instalação que não seja o usuário apigee

Diagnóstico

  1. Verifique se há outro usuário com rolesuper definido como true seguindo estas etapas:

    1. No nó do PostgreSQL, faça login usando o seguinte comando:

      psql -h $(hostname -i)  -U apigee
      
    2. Execute a seguinte consulta SQL:

      select * from pg_authid;
      
    3. Verifique se há vários usuários com rolesuper definido como true. Se houver, o upgrade do PostgreSQL está falhando porque outro usuário foi definido como usuário de instalação em vez do usuário apigee. Qualquer usuário com a função rolesuper e um OID menor é considerado um usuário de instalação.

      Para verificar esse tipo de problema de função, execute as seguintes consultas SQL:

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

Resolução

  1. Faça login no PostgreSQL usando o seguinte comando:

    psql -h $(hostname -i)  -U apigee
    
  2. Renomeie a função apigee no banco de dados antigo para um usuário temporário (por exemplo, apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Digamos que haja outro usuário de instalação srcapige. Renomeie a função srcapige para apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Renomeie o usuário apigee2 para srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Atualize a senha de todos os usuários renomeados:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Renomeie a pasta de dados do PostgreSQL usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Verifique se há dados de backup originais em uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Restaure os dados na pasta /opt/apigee/data/apigee-postgresql/pgdata-version.old/ para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

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

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Reinicie todos os serviços apigee-qpidd e edge-qpid-server:

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

Se o problema persistir, acesse Precisa de informações de diagnóstico.

É necessário coletar informações de diagnóstico

Se o problema persistir depois de seguir as instruções de solução de problemas acima, reúna as seguintes informações de diagnóstico. Entre em contato com o suporte da Apigee e compartilhe estas informações com a equipe de suporte:

  1. Adicione set -x na segunda linha do arquivo /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Siga as etapas comuns de diagnóstico e envie a saída do console do comando db_upgrade para a equipe de suporte:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Envie os seguintes arquivos de registro para a equipe de suporte:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Forneça a saída dos seguintes comandos do sistema operacional para verificar se as alternativas estão definidas como auto.

    update-alternatives --display psql 
    

    OU

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

    Se as alternativas estiverem definidas como manual, você poderá defini-las como auto usando o seguinte comando:

    update-alternatives --auto psql
    

    Definir as alternativas como auto aponta os binários psql e postgres para as versões atualizadas. Caso contrário, os binários vão apontar para a versão mais antiga, o que pode causar problemas.