Ошибка обновления PostgreSQL

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Симптом

Вы получаете сообщение об ошибке при обновлении базы данных PostgreSQL.

Сообщение об ошибке

ERROR: PostgreSQL Upgrade FAILED 

Возможные причины

Причина Описание Инструкции по устранению неполадок относятся к
Неправильные настройки репликации в файле конфигурации PostgreSQL. Обновление PostgreSQL завершается неудачно из-за неправильных настроек репликации во время обновления. Пользователи Edge частного облака
Установка PostgreSQL выполняется другим пользователем установки, отличным от пользователя apigee. Первоначально PostgreSQL был установлен с другим пользователем в качестве пользователя установки, что приводит к сбою обновления. Пользователи Edge частного облака

Общие этапы диагностики

Если при обновлении базы данных PostgreSQL вы получаете сообщение об ошибке, сначала выполните следующие действия по диагностике:

  1. Переименуйте папку данных PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Убедитесь, что исходные данные резервной копии находятся в папке с именем /opt/apigee/data/apigee-postgresql/pgdata- version .old/

    Например:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Восстановите данные резервной копии из /opt/apigee/data/apigee-postgresql/pgdata- version .old/ в /opt/apigee/data/apigee-postgresql/pgdata используя следующую команду:

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

    Например:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Повторно запустите команду db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Если вы получаете следующую ошибку...

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

    ...затем переименуйте файл pg_control.old в pg_control используя следующую команду:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Повторно запустите команду db_upgrade :

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

    Если проблема не устранена, перейдите к разделу Причина: неправильные настройки репликации в файле конфигурации PostgreSQL .

Причина: неправильные настройки репликации в файле конфигурации PostgreSQL.

Диагностика

  1. Проверьте, есть ли в файле конфигурации PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf нужные параметры репликации.
  2. Если этот файл имеет ожидаемые настройки репликации, перейдите к установке PostgreSQL, выполняемой другим пользователем установки, отличным от пользователя «apigee» .
  3. Если нет, перейдите в раздел «Решение» .

Разрешение

  1. Переименуйте папку данных PostgreSQL с помощью следующей команды:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Убедитесь, что исходные данные резервной копии находятся в папке с именем: /opt/apigee/data/apigee-postgresql/pgdata- version .old/

    Например:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Восстановите данные резервной копии из /opt/apigee/data/apigee-postgresql/pgdata- version .old/ в /opt/apigee/data/apigee-postgresql/pgdata используя следующую команду:

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

    Например:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Если вы когда-либо меняли подчиненный хост, вам необходимо обновить следующее свойство в /opt/apigee/customer/application/postgresql.properties , чтобы обновить файл конфигурации 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. Перезапустите службу apigee-postgresql , чтобы убедиться, что свойство, установленное на шаге 4 выше, обновлено в файле конфигурации pg_hba.conf :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Сделайте файл конфигурации pg_hba.conf неизменяемым с помощью следующей команды, чтобы гарантировать, что он не будет обновлен с неправильными настройками во время обновления PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Повторно запустите команду db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Удалите неизменяемый параметр в файле конфигурации pg_hba.conf :

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

Причина: установка PostgreSQL выполнена другим пользователем установки, отличным от пользователя apigee

Диагностика

  1. Проверьте, есть ли еще пользователь, для которого rolesuper установлено значение true , выполнив следующие действия:

    1. На узле PostgreSQL войдите в PostgreSQL, используя следующую команду:

      psql -h $(hostname -i)  -U apigee
      
    2. Запустите следующий SQL-запрос:

      select * from pg_authid;
      
    3. Проверьте, есть ли несколько пользователей, у которых для rolesuper установлено значение true . Если они есть, то обновление PostgreSQL не удалось, поскольку вместо пользователя apigee в качестве пользователя установки был установлен другой пользователь. Любой пользователь с ролью rolesuper и более низким OID считается пользователем, выполняющим установку.

      Чтобы проверить подобную проблему с ролями, выполните следующие SQL-запросы:

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

Разрешение

  1. Войдите в PostgreSQL, используя следующую команду:

    psql -h $(hostname -i)  -U apigee
    
  2. Переименуйте существующую роль apigee в старой БД во временного пользователя (например: apigee2 ):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Допустим, был другой установщик srcapige . Переименуйте роль srcapige в apigee :

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Переименуйте apigee2 в пользователя srcapige :

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Обновите пароль для всех переименованных пользователей:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Переименуйте папку данных PostgreSQL с помощью следующей команды:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Убедитесь, что в папке с именем /opt/apigee/data/apigee-postgresql/pgdata- version .old/ имеются исходные данные резервной копии.

    Например:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Восстановите данные из папки /opt/apigee/data/apigee-postgresql/pgdata- version .old/ в /opt/apigee/data/apigee-postgresql/pgdata используя следующую команду:

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

    Например:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Повторно запустите команду db_upgrade :

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Перезапустите все службы apigee-qpidd и edge-qpid-server :

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

Если проблема не устранена, перейдите к разделу «Необходимо собрать диагностическую информацию» .

Необходимо собрать диагностическую информацию

Если проблема не устранена после выполнения приведенных выше инструкций по устранению неполадок, соберите следующую диагностическую информацию. Свяжитесь со службой поддержки Apigee и поделитесь этой информацией со службой поддержки:

  1. Добавьте set -x во вторую строку файла /opt/apigee/apigee-postgresql/lib/actions/db_upgrade .
  2. Выполните общие шаги диагностики и предоставьте команде поддержки консольный вывод команды db_upgrade :

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Предоставьте следующие файлы журналов в службу поддержки:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Предоставьте выходные данные следующих команд операционной системы, чтобы проверить, установлены ли альтернативы на auto .

    update-alternatives --display psql 
    

    ИЛИ

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

    ИЛИ

    update-alternatives --list pgsql
    

    Если в качестве альтернативы установлено значение manual , вы можете установить для них значение auto , используя следующую команду:

    update-alternatives --auto psql
    

    Установка альтернатив для auto указания двоичных файлов psql и postgres на обновленные версии. В противном случае двоичные файлы будут указывать на более старую версию, что может вызвать проблемы.