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. 次のコマンドを使用して構成ファイル pg_hba.conf を不変にします。これにより、PostgreSQL のアップグレード中に誤った設定で更新されないようにします。

    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 ユーザーではなくインストール ユーザーとして設定されているため、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. apigee2srcapige ユーザーに名前変更します。

    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 
    

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

    update-alternatives --auto psql
    

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