تعذّرت ترقية PostgreSQL

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

تظهر لك رسالة خطأ عند تحديث قاعدة بيانات PostgreSQL.

رسالة الخطأ

ERROR: PostgreSQL Upgrade FAILED 

الأسباب المحتملة

السبب الوصف تنطبق تعليمات تحديد المشاكل وحلّها على
إعدادات النسخ المتماثل غير صحيحة في ملف إعداد PostgreSQL تعذّرت ترقية PostgreSQL بسبب إعدادات النسخ المتماثل غير الصحيحة أثناء الترقية. مستخدمو Edge الخاص على السحابة الإلكترونية
عملية تثبيت PostgreSQL التي يُجريها مستخدم آخر للتثبيت غير مستخدم واجهة برمجة التطبيقات تم تثبيت PostgreSQL في البداية مع مستخدم آخر كمستخدم للتثبيت، ما أدّى إلى تعذُّر الترقية. مستخدمو Edge الخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

إذا ظهرت لك رسالة خطأ عند ترقية قاعدة بيانات 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. إذا كان هذا الملف يتضمن إعدادات النسخ المتماثل المتوقعة، انتقِل إلى تثبيت PostgreSQL الذي تم إجراؤه من قِبل مستخدم آخر للتثبيت غير مستخدم "apigee".
  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
    

السبب: تم تثبيت PostgreSQL من قِبل مستخدم آخر غير مستخدم apigee.

التشخيص

  1. تحقَّق مما إذا كان هناك أي مستخدم آخر تم ضبط قيمة rolesuper على true من خلال اتّباع الخطوات التالية:

    1. في عقدة PostgreSQL، سجّل الدخول إلى PostgreSQL باستخدام الأمر التالي:

      psql -h $(hostname -i)  -U apigee
      
    2. قم بتشغيل استعلام SQL التالي:

      select * from pg_authid;
      
    3. تحقَّق مما إذا كان هناك عدة مستخدمين تم ضبط rolesuper على true. إذا كان الأمر كذلك، يعني ذلك فشل ترقية PostgreSQL بسبب ضبط الإعدادات لمستخدم آخر على install user بدلاً من مستخدم apigee. أي مستخدم لديه دور rolesuper ومعرّف OID أقل يعتبر مستخدم تثبيت.

      للتحقق من هذا النوع من مشكلات الأدوار، قم بتشغيل استعلامات SQL التالية:

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

الحلّ

  1. قم بتسجيل الدخول إلى PostgreSQL باستخدام الأمر التالي:

    psql -h $(hostname -i)  -U apigee
    
  2. إعادة تسمية دور 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. أضِف set -x في السطر الثاني من ملف /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  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 إلى الإصدارات التي تمت ترقيتها. وإلا، ستشير البرامج الثنائية إلى الإصدار الأقدم، مما قد يسبب مشكلات.