您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。信息
问题
您在更新 PostgreSQL 数据库时收到错误。
错误消息
ERROR: PostgreSQL Upgrade FAILED
可能的原因
原因 | 说明 | 问题排查说明适用于 |
---|---|---|
PostgreSQL 配置文件中的复制设置不正确 | 由于升级期间复制设置不正确,PostgreSQL 升级失败。 | Edge Private Cloud 用户 |
由 apigee 用户以外的其他安装用户执行的 PostgreSQL 安装 | PostgreSQL 最初是使用其他用户作为安装用户进行安装的,这导致升级失败。 | 边缘私有云用户 |
常见诊断步骤
如果您在升级 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 升级会失败,因为系统已将其他用户设置为安装用户,而不是 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
二进制文件指向 升级后的版本。否则,二进制文件将指向旧版本,这可能会导致问题。