أحاول ترحيل منتدى إلى خادم جديد. كلا الخادمين يعملان بأحدث إصدار من discourse docker. عند استيراد النسخة الاحتياطية عبر سطر الأوامر، أحصل على الخطأ التالي:
ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL: Key (path, incoming_domain_id)=(/search/, 418) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/search/, 418) is duplicated.
يبدو هذا هو نفس الخطأ أو خطأ مشابه للخطأ الموجود في:
ومع ذلك، في حالتي، السجلات المكررة موجودة في المسار /search/ بدلاً من /m/search كما هو الحال في الموضوع المرتبط أعلاه.
لقد اتصلت بالحاوية على الخادم القديم (./launcher enter app) وفي وحدة تحكم Rails (rails c) حاولت البحث عن السجلات المكررة باستخدام:
IncomingReferer.where(path: "/search")
و IncomingReferer.where("path LIKE '%/search%'")
ومع ذلك، ينتج عن هذا مئات السجلات التي يتم عرضها. كيف يمكنني معرفة السجلات المكررة، وكيف يمكنني حذفها بأمان وإعادة بنائها؟ يعمل المنتدى حاليًا بشكل جيد على الخادم القديم، ونحن بحاجة فقط إلى الانتقال إلى أجهزة جديدة.
DELETE FROM incoming_referers WHERE path LIKE '%/search/' AND id IN (6247);
ثم إعادة البناء
discourse=# REINDEX SCHEMA CONCURRENTLY public;
WARNING: cannot reindex invalid index "public.incoming_referers_pkey_ccnew" concurrently, skipping
WARNING: cannot reindex invalid index "public.index_incoming_referers_on_path_and_incoming_domain_id_ccnew" concurrently, skipping
WARNING: cannot reindex invalid index "pg_toast.pg_toast_20732_index_ccnew" concurrently, skipping
REINDEX
ثم أخذت نسخة احتياطية أخرى، ونسختها إلى الخادم الجديد، وتمت استيراده بنجاح
سيكون من الجيد لو كانت عملية النسخ الاحتياطي قادرة على اكتشاف التكرارات لتجنب أي مشاكل. لقد كنت محظوظًا لأنني كان لدي وصول إلى الخادم الأصلي الذي كان لا يزال يعمل. لو كنت أستعيد نسخة احتياطية باردة، لكان هذا على الأرجح يمثل مشكلة أكبر>