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

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

Симптом

При обновлении базы данных 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 
    

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

    update-alternatives --auto psql
    

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