Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Symptom
При обновлении базы данных PostgreSQL возникает ошибка.
Сообщение об ошибке
ERROR: PostgreSQL Upgrade FAILED
Возможные причины
| Причина | Описание | Инструкции по устранению неполадок относятся к |
|---|---|---|
| Неправильные настройки репликации в файле конфигурации PostgreSQL | Обновление PostgreSQL не удается из-за неправильных настроек репликации. | Пользователи Edge Private Cloud |
| Установка PostgreSQL выполнена другим пользователем, а не пользователем apigee | Первоначально PostgreSQL был установлен другим пользователем, что приводит к сбою при обновлении. | Пользователи Edge Private Cloud |
Распространенные этапы диагностики
Если при обновлении базы данных PostgreSQL возникает ошибка, сначала выполните следующие диагностические действия:
Переименуйте папку с данными PostgreSQL:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
Убедитесь, что исходные данные резервной копии находятся в папке
/opt/apigee/data/apigee-postgresql/pgdata-version.old/.Пример:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/Восстановите данные из резервной копии в
/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
Повторно выполните команду
db_upgrade:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Если вы видите сообщение об ошибке…
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
Повторно выполните команду
db_upgrade:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Если проблема не исчезнет, перейдите к разделу Причина: неправильные настройки репликации в файле конфигурации PostgreSQL.
Причина: неправильные настройки репликации в файле конфигурации PostgreSQL
Диагностика
- Проверьте, есть ли в файле конфигурации PostgreSQL
/opt/apigee/apigee-postgresql/conf/pg_hba.confнастройки репликации, которые вам нужны. - Если в этом файле заданы нужные настройки репликации, перейдите к разделу Установка PostgreSQL, выполненная другим пользователем, а не пользователем apigee.
- Если нет, перейдите к разделу Разрешение.
Разрешение
Переименуйте папку с данными PostgreSQL, используя следующую команду:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
Убедитесь, что исходные данные резервной копии находятся в папке с названием
/opt/apigee/data/apigee-postgresql/pgdata-version.old/.Пример:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/Чтобы восстановить данные из резервной копии с
/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
Если вы когда-либо меняли подчиненный хост, вам необходимо обновить следующее свойство в файле конфигурации
/opt/apigee/customer/application/postgresql.properties:pg_hba.confconf_pg_hba_replication.connection=host replication apigee existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trustПерезапустите сервис
apigee-postgresql, чтобы убедиться, что свойство, заданное на шаге 4, было обновлено в файле конфигурацииpg_hba.conf:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
Сделайте файл конфигурации
pg_hba.confнеизменяемым, используя следующую команду, чтобы убедиться, что он не будет обновлен с неправильными настройками во время обновления PostgreSQL:chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
Повторно выполните команду
db_upgrade:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Удалите неизменяемую настройку в файле конфигурации
pg_hba.conf:chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
Причина: установка PostgreSQL выполнена другим пользователем, а не пользователем apigee.
Диагностика
Чтобы проверить, есть ли другие пользователи, для которых параметр rolesuper имеет значение true, выполните следующие действия:
На узле PostgreSQL войдите в PostgreSQL, используя следующую команду:
psql -h $(hostname -i) -U apigee
Выполните следующий SQL-запрос:
select * from pg_authid;
Проверьте, есть ли несколько пользователей, для которых параметр rolesuper имеет значение true. Если это так, то обновление PostgreSQL не выполняется, поскольку в качестве пользователя для установки был задан другой пользователь, а не apigee. Пользователь с ролью rolesuper и более низким идентификатором OID считается пользователем, установившим приложение.
Чтобы проверить, есть ли проблемы с ролями, выполните следующие запросы SQL:
select oid,rolname,rolsuper from pg_roles; select * from pg_user;
Разрешение
Войдите в PostgreSQL, используя следующую команду:
psql -h $(hostname -i) -U apigee
Переименуйте существующую роль
apigeeв старой базе данных во временного пользователя (например,apigee2):update pg_authid set rolname ='apigee2' where rolname = 'apigee';
Предположим, что был ещё один пользователь, установивший приложение, –
srcapige. Переименуйте рольsrcapigeвapigee:update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
Переименуйте пользователя
apigee2в пользователяsrcapige:update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
Измените пароль для всех переименованных пользователей:
ALTER ROLE apigee WITH PASSWORD '<secret>'; ALTER ROLE srcapige WITH PASSWORD '<secret>';Переименуйте папку с данными PostgreSQL, используя следующую команду:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
Убедитесь, что в папке
/opt/apigee/data/apigee-postgresql/pgdata-version.old/есть исходные данные резервной копии.Пример:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/Восстановите данные в папке
/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
Повторно выполните команду
db_upgrade:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Перезапустите все сервисы
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 и сообщите специалистам следующую информацию:
- Добавьте
set -xво второй строке файла/opt/apigee/apigee-postgresql/lib/actions/db_upgrade. Выполните общие действия по диагностике и отправьте в службу поддержки выходные данные консоли команды
db_upgrade:opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Отправьте в службу поддержки следующие файлы журналов:
/opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log /opt/apigee/var/log/apigee-postgresql/update.logЧтобы проверить, заданы ли альтернативные значения для параметра
auto, выполните следующие команды операционной системы:update-alternatives --display psql
ИЛИ
update-alternatives --display pgsqlupdate-alternatives --listЕсли для альтернативных вариантов задано значение
manual, вы можете изменить его наautoс помощью следующей команды:update-alternatives --auto psql
Если задать для альтернативных вариантов значение
auto, двоичные файлыpsqlиpostgresбудут указывать на обновленные версии. В противном случае двоичные файлы будут указывать на более старую версию, что может привести к проблемам.