您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
问题
更新 PostgreSQL 数据库时收到错误。
错误消息
ERROR: PostgreSQL Upgrade FAILED
可能的原因
原因 | 说明 | 问题排查说明适用于 |
---|---|---|
PostgreSQL 配置文件中的复制设置不正确 | 由于升级期间的复制设置不正确,PostgreSQL 升级失败。 | Edge Private Cloud 用户 |
由 Apigee 用户以外的其他安装用户执行的 PostgreSQL 安装 | 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
是否包含您所需的复制设置。 - 如果此文件具有预期的复制设置,请转到由“apigee”用户以外的另一个安装用户执行的 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
如果您更改了从主机,则必须更新
/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
重启
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
原因:并非 apigee
用户之外的其他安装用户执行了 PostgreSQL 安装
诊断
请按照以下步骤检查是否存在将 rolesuper 设置为 true 的其他用户:
在 PostgreSQL 节点上,使用以下命令登录 PostgreSQL:
psql -h $(hostname -i) -U apigee
请运行以下 SQL 查询:
select * from pg_authid;
检查是否有多个用户的 rolesuper 设置为 true。如果存在,则表示 PostgreSQL 升级失败,因为另一位用户已被设置为 install user,而不是 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 支持团队,并与支持团队分享此信息:
- 在
/opt/apigee/apigee-postgresql/lib/actions/db_upgrade
文件的第二行添加set -x
。 按照常见诊断步骤操作,并向支持团队提供
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
OR
update-alternatives --display pgsql
update-alternatives --list psql
OR
update-alternatives --list pgsql
如果备选项设为
manual
,您可以使用以下命令将其设为auto
:update-alternatives --auto psql
将替代项设置为
auto
会将psql
和postgres
二进制文件指向升级后的版本。否则,二进制文件将指向旧版本,这可能会导致出现问题。