أحاول ترحيل منتدى إلى خادم جديد. كلا الخادمين يعملان بأحدث إصدار من 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%'")
ومع ذلك، ينتج عن هذا مئات السجلات التي يتم عرضها. كيف يمكنني معرفة السجلات المكررة، وكيف يمكنني حذفها بأمان وإعادة بنائها؟ يعمل المنتدى حاليًا بشكل جيد على الخادم القديم، ونحن بحاجة فقط إلى الانتقال إلى أجهزة جديدة.
The old server doesn’t have a file called PG_VERSION, how can I tell what version its running? I’ve updated the docket install to the latest version today.
The new server (newly bootstrapped) is running postgres V13
cat shared/standalone/postgres_data/PG_VERSION
13
Is there a recommended procedure on how to do this?
I had a topic that had some hints, but I don’t see it anymore. It’s been close to a year since the postgres 12 upgrade.
reindex index index_incoming_referers_on_path_and_incoming_domain_id;
And
ActiveRecord::Base.connection.execute('reindex index index_incoming_referers_on_path_and_incoming_domain_id;')
Are ways to try to rebuild the index. It’ll give you an error and you can then go and delete the errant records. You’ll need to include both the path and the ID.
DELETE FROM incoming_referers WHERE path LIKE '%/search/' AND id IN (6247);
Then rebuild
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
Then I took another backup, copied it to the new server, and it imported successfully
It would be nice if the backup process could spot duplicates to avoid any issues, I was luckily that I had access to the original server which was still running. If I was restoring a cold backup, this would probably have been more of an issue>