Nie udało się uaktualnić PostgreSQL

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info

Krótki opis problemu

Podczas aktualizowania bazy danych PostgreSQL pojawia się błąd.

Komunikat o błędzie

ERROR: PostgreSQL Upgrade FAILED 

Możliwe przyczyny

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczą
Nieprawidłowe ustawienia replikacji w pliku konfiguracyjnym PostgreSQL Uaktualnienie PostgreSQL kończy się niepowodzeniem z powodu nieprawidłowych ustawień replikacji podczas uaktualniania. Użytkownicy Edge Private Cloud
Instalacja PostgreSQL przeprowadzona przez innego użytkownika instalacji niż użytkownik apigee PostgreSQL został początkowo zainstalowany przez innego użytkownika, co powoduje niepowodzenie uaktualnienia. Użytkownicy Edge Private Cloud

Typowe etapy diagnostyki

Jeśli podczas uaktualniania bazy danych PostgreSQL pojawi się błąd, wykonaj najpierw te czynności diagnostyczne:

  1. Zmień nazwę folderu danych PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Upewnij się, że oryginalne dane kopii zapasowej znajdują się w folderze o nazwie /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Przywróć dane kopii zapasowej z /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do /opt/apigee/data/apigee-postgresql/pgdata za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Ponownie uruchom polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Jeśli pojawi się ten błąd…

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    …a następnie zmień nazwę pliku pg_control.old na pg_control, używając tego polecenia:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Ponownie uruchom polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

    Jeśli problem nadal występuje, przejdź do sekcji Przyczyna: nieprawidłowe ustawienia replikacji w pliku konfiguracyjnym PostgreSQL.

Przyczyna: nieprawidłowe ustawienia replikacji w pliku konfiguracyjnym PostgreSQL

Diagnoza

  1. Sprawdź, czy plik konfiguracji PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf zawiera odpowiednie ustawienia replikacji.
  2. Jeśli ten plik ma oczekiwane ustawienia replikacji, przejdź do sekcji Instalacja PostgreSQL przeprowadzona przez innego użytkownika niż „apigee”.
  3. Jeśli nie, przejdź do sekcji Rozwiązanie.

Rozdzielczość

  1. Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Upewnij się, że oryginalne dane kopii zapasowej znajdują się w folderze o nazwie: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Przywróć dane kopii zapasowej z /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do /opt/apigee/data/apigee-postgresql/pgdata za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Jeśli kiedykolwiek zmienisz hosta podrzędnego, musisz zaktualizować w pliku konfiguracyjnym następującą właściwość:/opt/apigee/customer/application/postgresql.propertiespg_hba.conf

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. Uruchom ponownie usługę apigee-postgresql, aby upewnić się, że właściwość ustawiona w pg_hba.conf kroku 4 powyżej została zaktualizowana w pliku konfiguracyjnym:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Ustaw plik konfiguracji jako pg_hba.conf niezmienny, używając tego polecenia, aby mieć pewność, że podczas uaktualniania PostgreSQL nie zostaną w nim zapisane nieprawidłowe ustawienia:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Ponownie uruchom polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Usuń niezmienialne ustawienie w pliku konfiguracyjnym pg_hba.conf:

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

Przyczyna: instalacja PostgreSQL została przeprowadzona przez innego użytkownika niż apigee.

Diagnoza

  1. Sprawdź, czy inny użytkownik ma ustawioną wartość rolesuper na true. W tym celu wykonaj te czynności:

    1. Na węźle PostgreSQL zaloguj się w PostgreSQL za pomocą tego polecenia:

      psql -h $(hostname -i)  -U apigee
      
    2. Uruchom to zapytanie SQL:

      select * from pg_authid;
      
    3. Sprawdź, czy wielu użytkowników ma ustawioną wartość rolesuper na true. Jeśli tak jest, uaktualnienie PostgreSQL nie powiodło się, ponieważ inny użytkownik został ustawiony jako użytkownik instalacji zamiast użytkownika apigee. Każdy użytkownik z rolą rolesuper i niższym identyfikatorem OID jest uznawany za użytkownika instalacji.

      Aby sprawdzić, czy występuje ten rodzaj problemu z rolą, uruchom te zapytania SQL:

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

Rozdzielczość

  1. Zaloguj się w PostgreSQL za pomocą tego polecenia:

    psql -h $(hostname -i)  -U apigee
    
  2. Zmień nazwę istniejącej roli apigee w starej bazie danych na tymczasową nazwę użytkownika (np. apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Załóżmy, że był jeszcze jeden użytkownik instalujący srcapige. Zmień nazwę roli srcapige na apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Zmień nazwę użytkownika apigee2 na srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Zaktualizuj hasło wszystkich użytkowników, których nazwy zostały zmienione:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Sprawdź, czy w folderze o nazwie /opt/apigee/data/apigee-postgresql/pgdata-version.old/ znajdują się oryginalne dane kopii zapasowej.

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Przywróć dane w folderze /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do /opt/apigee/data/apigee-postgresql/pgdata za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Ponownie uruchom polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Ponownie uruchom wszystkie usługi apigee-qpiddedge-qpid-server:

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

Jeśli problem nadal występuje, przejdź do sekcji Informacje diagnostyczne, które musisz zebrać.

Musi zbierać informacje diagnostyczne

Jeśli po wykonaniu powyższych instrukcji problem nadal występuje, zbierz te informacje diagnostyczne: Skontaktuj się z zespołem pomocy Apigee i przekaż mu te informacje:

  1. W drugim wierszu pliku /opt/apigee/apigee-postgresql/lib/actions/db_upgrade dodaj set -x.
  2. Wykonaj typowe czynności diagnostyczne i prześlij zespołowi pomocy dane wyjściowe z konsoli po wykonaniu polecenia db_upgrade:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Prześlij zespołowi pomocy te pliki dziennika:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Podaj dane wyjściowe tych poleceń systemu operacyjnego, aby sprawdzić, czy alternatywy są ustawione na auto.

    update-alternatives --display psql 
    

    LUB

    update-alternatives --display pgsql
    update-alternatives --list 
    

    Jeśli alternatywne adresy URL są ustawione na manual, możesz je ustawić na auto za pomocą tego polecenia:

    update-alternatives --auto psql
    

    Ustawienie alternatyw na auto powoduje, że pliki binarne psqlpostgres wskazują uaktualnione wersje. W przeciwnym razie pliki binarne będą wskazywać starszą wersję, co może powodować problemy.