فشل الاستيراد بسبب "لم يُمكن إنشاء فهرس فريد"

حسناً، لقد تجاوزنا الصعوبات وعادنا للعمل عبر الإنترنت. شكراً للتلميحات يا @Falco.

لمساعدة الآخرين في حل مشاكلهم، إليك تفصيلاً للخطوات التي اتبعناها.

لقد واجهنا بعض الفهارس التالفة التي تسببت في فشل عملية الاستيراد. تمكنا من إصلاح ذلك بحذف التكرارات يدوياً. كما كان لدينا 8 مستخدمين يحملون قيمة مكررة في الحقل username_lower (كثرة أسماء مايك وماركو). قمنا بإعادة تسميتهم بتحديث كل من username و username_lower. من بيانات المستخدمين، لاحظنا أن أول تلف قد حدث في ديسمبر 2019.

بدلاً من تكرار دورة “إنشاء نسخة احتياطية” → “استعادة النسخة” → “فشل بسبب التكرار” → “إصلاح”، قررنا إعادة فهرسة جميع الفهارس. وجدنا جميع الفهارس ذات القيود الفريدة باستخدام الاستعلام التالي:

select idx.relname as index_name, 
       insp.nspname as index_schema,
       tbl.relname as table_name,
       tnsp.nspname as table_schema
from pg_index pgi
  join pg_class idx on idx.oid = pgi.indexrelid
  join pg_namespace insp on insp.oid = idx.relnamespace
  join pg_class tbl on tbl.oid = pgi.indrelid
  join pg_namespace tnsp on tnsp.oid = tbl.relnamespace
where pgi.indisunique --<< فقط الفهارس الفريدة
  and tnsp.nspname = 'public'

بمجرد عمل جميع الفهارس، تمكنا من إنشاء نسخة احتياطية واستيرادها بشكل صحيح في المثيل الجديد. تم تنفيذ عمليات الترحيل كما هو متوقع، وقمنا بتبديل المثيلات، وعادنا للعمل بنجاح :+1: تحية لمرونة منصة Discourse :beers:

شكراً مرة أخرى يا @Falco.

أتمنى لكم عطلة نهاية أسبوع ممتعة :slight_smile: