現在、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
PostgreSQL のアップグレード中に誤った設定で更新されないように、次のコマンドを使用して構成ファイル
pg_hba.conf
を不変にします。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 に設定されているかどうかを確認します。 存在する場合は、別のユーザーが apigee ユーザーではなく install user に設定されているため、PostgreSQL のアップグレードが失敗しています。rolesuper ロールとそれより低い OID を持つユーザーは、インストール ユーザーとみなされます。
この種のロールの問題を確認するには、次の SQL クエリを実行します。
select oid,rolname,rolsuper from pg_roles; select * from pg_user;
解決策
次のコマンドを使用して PostgreSQL にログインします。
psql -h $(hostname -i) -U apigee
古い DB の既存の
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
ファイルの 2 行目に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
または
update-alternatives --display pgsql
update-alternatives --list psql
または
update-alternatives --list pgsql
代替値が
manual
に設定されている場合は、次のコマンドを使用してauto
に設定できます。update-alternatives --auto psql
代替を
auto
に設定すると、psql
バイナリとpostgres
バイナリがアップグレードされたバージョンを指します。そうしないと、バイナリが古いバージョンを参照することになるため、問題が発生する可能性があります。