للأسف، لم يساعد ذلك، وما زلت أحصل على هذه الرسالة عند الاستعادة:
[2021-07-03 16:53:41] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
[2021-07-03 16:53:41] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
ليس واضحًا بالنسبة لي كيفية إصلاح ذلك.
لقد وجدت المزيد من التكرارات باستخدام ```IncomingReferer.where(“path LIKE ‘%/m/search%’”)``، لذا استخدمت الحذف لهذه الفهارس أيضًا. يبدو الآن أن مثيلي لا يعمل على الإطلاق — حتى على الخادم القديم، لذا سأحاول إعادة بنائه.
[2021-07-03 17:28:53] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
[2021-07-03 17:28:53] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
عند محاولة استعادة نسخة احتياطية جديدة.
لكن سطر الأوامر الخاص بي يُظهر أنني قمت بتنظيف المثيلات على الخادم قيد التشغيل (والذي عاد للعمل الآن بعد إعادة البناء):
بشكل أساسي، تريد إعادة بناء الفهرس مع الاستمرار في حذف العناصر حتى تتمكن من إعادة فهرستها. يبدو أنك تقوم بالإجراءات الصحيحة، ولكنك تحتاج إلى الاستمرار في ذلك لجميع الإدخالات المكررة.
إذا كان لديك ميزانية، فيمكنك النشر في Marketplace.
ليس قانونيًا في المملكة المتحدة تعريض قاعدة بياناتنا لأطراف ثالثة لحل هذه المشكلات، وحتى لو كان ذلك قانونيًا، فلا يوجد لدي أي اهتمام بفعل ذلك حفاظًا على خصوصية المستخدمين.
بصفتي مسؤولًا عن مشروع مفتوح المصدر، فإن فكرة نقل الأمر إلى Marketplace مخيبة للآمال، خاصةً عندما يبدو أن هناك اعترافًا ضمنيًا بأن المشكلات ناتجة عن تحديث لـ Postgres تم تضمينه في حاوية Docker الخاصة بـ Discourse. نستخدم Discourse في حاوية Docker لأننا ندرك الاعتماديات المترابطة عن كثب ونود تفويض إدارة الإصدارات والاعتماديات لخبرة فريق Discourse.
يبدو أن الأمر مقبول بأن هذه مشكلة تراجع في Postgres 12 وأن هناك بعض التخفيفات المحتملة. ومع ذلك، بدأت التقارير الأولى قبل أكثر من عام، وأنا متأكد من أن هناك مستخدمين أكثر سيتأثرون في المستقبل إذا حاولوا استعادة نسخة احتياطية.
أفضل رعاية وقت تطوير لإصلاح هذا الأمر في Discourse من المصدر (upstream) حتى يستفيد منه الآخرون أيضًا. وفي الوقت الراهن، منتدى غير وظيفي، وسيكون عليّ استشارة شخص يمتلك معرفة بمسؤولي قواعد بيانات Postgres.
أعتذر لأنني لم أتمكن من تزويدك بتعليمات كافية لحل مشكلتك بنفسك، لكن هذا هو ما بدا أنك تقصده. ظننت أن وجود طرق أخرى لإعادة منتدى الإنترنت إلى العمل قد يكون مصدر راحة بدلاً من خيبة أمل.
على الإطلاق. أنت لا مدين لي بشيء — لكنني كنت آمل أن يكون لديك حل سريع نظرًا لسجل مشاركاتك، وقد افترضت أنني أغفلت شيئًا واضحًا نظرًا لأن مشاركاتك بدت إجابة حاسمة والموضوع مغلق.
للأسف، لا يزال هذا يمثل مشكلة بالنسبة لنا، ولا يمكننا نقل الخوادم، وهو أمر مثير للقلق إلى حد ما.
نحن مستعدون لدفع مبلغ لشخص ما لحل هذه المشكلة، ولكن بعد هذه الحادثة، واعتراف الفريق بها مرات عديدة دون وجود حل واضح في المنتدى، فإننا نعتبر بجدية الانتقال إلى برنامج منتدى مختلف مثل Flarum. قد لا يكون غنيًا بالميزات مثل Discourse، لكنه يعتمد على مكدس LAMP، ويمكنني (بصفتي غير مطور ويب) فهمه والعمل عليه.
عندما استخدمنا حاوية Docker الخاصة بـ Discourse، توقعنا أن يكون هناك دعم فني. لو كنا قد نشرنا كل شيء بشكل منفصل واستخدمنا إصدارنا الخاص من Postgres، لكان من الممكن أن نقدر الرد. ولكن حتى الآن، كل ما قمنا به هو استخدام البيئة التي أوصى بها الفريق وقدموها بأنفسهم، والآن نحن في ورطة كبيرة فيما يتعلق بنقلنا إلى خادم جديد (لدينا موعد نهائي وشيك).
في هذه المرحلة، أفضل خيار لدي هو إجراء نسخ احتياطي لاستعادة مجلد Docker، لأن نسخ Discourse الاحتياطية غير قابلة للاستخدام. هذا أيضًا أمر مقلق: لدينا نسخ احتياطية يتم إنشاؤها يوميًا، لكن لا يمكن استعادتها فعليًا إلى بيئة Discourse جديدة. أتساءل كم عدد الآخرين الذين سيواجهون مثل هذه المشكلة في المستقبل القريب.