خطأ في التحديث إلى أحدث إصدار من Discourse -- تم الحل

تم الإصلاح.

لقد تطلب الأمر بعض التلاعب بقاعدة البيانات. استخدمت صورة docker الخاصة بـ postgres لتركيب قاعدة البيانات:

docker run --name postgres_container_2 -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 -v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/data postgres:15

ثم حددت الصف المسبب للمشكلة:

SELECT
          tc.topic_id,
          tc.answer_post_id,
          tc.topic_timer_id,
          tc.accepter_user_id,
          tc.created_at,
          tc.updated_at
        FROM (
          SELECT
            tc.topic_id,
            CAST(tc.value AS INTEGER) AS answer_post_id,
            CAST(tc2.value AS INTEGER) AS topic_timer_id,
            COALESCE(ua.acting_user_id, -1) AS accepter_user_id,
            tc.created_at,
            tc.updated_at,
            ROW_NUMBER() OVER (PARTITION BY tc.topic_id ORDER BY tc.created_at ASC) AS rn_topic,
            ROW_NUMBER() OVER (PARTITION BY CAST(tc.value AS INTEGER) ORDER BY tc.created_at ASC) AS rn_answer
          FROM topic_custom_fields tc
          LEFT JOIN topic_custom_fields tc2 ON tc2.topic_id = tc.topic_id AND tc2.name = 'solved_auto_close_topic_timer_id'
          LEFT JOIN user_actions ua ON ua.target_topic_id = tc.topic_id AND ua.action_type = 15
          WHERE tc.name = 'accepted_answer_post_id'
            AND tc.id > 0
            AND tc.id <= 0 + 10000
            AND tc.value IS NULL
        ) tc

بمجرد التأكد من أن هذا حدد فقط الصف الموجود في الخطأ، قمت بتغيير التحديد إلى DELETE، وأغلقت أصابعي ونفذت ./launcher rebuild app.

بعد الكثير من الوقت في انتظار بناء الصورة، لدي الآن مجتمع سعيد وموقع مُعاد بناؤه، بما في ذلك إصلاحات الأمان.

لا أعرف ما الذي تسبب في أن يصبح الصف المذكور أعلاه غير صالح، ولكن بمجرد إزالته، أصبح كل شيء على ما يرام.

4 إعجابات