PostgreSQL のアップグレードの失敗

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

内容

PostgreSQL データベースの更新時にエラーが発生します。

エラー メッセージ

ERROR: PostgreSQL Upgrade FAILED 

考えられる原因

原因 説明 トラブルシューティング手順は、
PostgreSQL 構成ファイルのレプリケーション設定が正しくない アップグレード中にレプリケーション設定が正しくないため、PostgreSQL のアップグレードが失敗します。 Edge Private Cloud ユーザー
apigee ユーザー以外の別のインストール ユーザーが PostgreSQL のインストールを実行する PostgreSQL は当初、別のユーザーをインストール ユーザーとしてインストールしたため、アップグレードに失敗しました。 Edge Private Cloud ユーザー

一般的な診断手順

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. このファイルに想定されるレプリケーション設定がある場合は、「apigee」ユーザー以外の別のインストール ユーザーが PostgreSQL インストールを実行するに進みます。
  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. PostgreSQL のアップグレード中に誤った設定で更新されないように、次のコマンドを使用して構成ファイル pg_hba.conf を不変にします。

    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
    

原因: apigee ユーザー以外の別のインストール ユーザーが PostgreSQL のインストールを実行しました

診断

  1. 他のユーザーが rolesupertrue に設定しているかどうかを確認するには、次の手順を行います。

    1. PostgreSQL ノードで、次のコマンドを使用して PostgreSQL にログインします。

      psql -h $(hostname -i)  -U apigee
      
    2. 次の SQL クエリを実行します。

      select * from pg_authid;
      
    3. 複数のユーザーが rolesupertrue に設定されているかどうかを確認します。 存在する場合は、別のユーザーが apigee ユーザーではなく install user に設定されているため、PostgreSQL のアップグレードが失敗しています。rolesuper ロールとそれより低い OID を持つユーザーは、インストール ユーザーとみなされます。

      この種のロールの問題を確認するには、次の SQL クエリを実行します。

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

解決策

  1. 次のコマンドを使用して PostgreSQL にログインします。

    psql -h $(hostname -i)  -U apigee
    
  2. 古い DB の既存の 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. /opt/apigee/apigee-postgresql/lib/actions/db_upgrade ファイルの 2 行目に set -x を追加します。
  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 psql
    

    または

    update-alternatives --list pgsql
    

    代替値が manual に設定されている場合は、次のコマンドを使用して auto に設定できます。

    update-alternatives --auto psql
    

    代替を auto に設定すると、psql バイナリと postgres バイナリがアップグレードされたバージョンを指します。そうしないと、バイナリが古いバージョンを参照することになるため、問題が発生する可能性があります。