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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

تتلقّى رسالة خطأ عند تعديل قاعدة بيانات PostgreSQL.

رسالة الخطأ

ERROR: PostgreSQL Upgrade FAILED 

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

السبب الوصف تنطبق تعليمات تحديد المشاكل وحلّها على
إعدادات النسخ المتماثل غير صحيحة في ملف إعدادات PostgreSQL يتعذّر ترقية PostgreSQL بسبب إعدادات النسخ المتماثل غير الصحيحة أثناء الترقية. مستخدمو Edge Private Cloud
تم تثبيت PostgreSQL بواسطة مستخدم آخر غير مستخدم Apigee تم تثبيت 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. إذا كان هذا الملف يتضمّن إعدادات النسخ المتماثل المتوقّعة، انتقِل إلى تثبيت 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 تعذّر إجراؤها لأنّه تم ضبط مستخدم آخر على أنّه مستخدم التثبيت بدلاً من المستخدم 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 
    

    إذا تم ضبط البدائل على manual، يمكنك ضبطها على auto باستخدام الأمر التالي:

    update-alternatives --auto psql
    

    يؤدي ضبط البدائل على auto إلى توجيه الملفات الثنائية psql وpostgres إلى الإصدارات التي تمت ترقيتها. وفي حال عدم توفّرها، ستشير الملفات الثنائية إلى الإصدار الأقدم، ما قد يتسبّب في حدوث مشاكل.