مشكلة توافق PG13 :نار:

ما هذا؟

يقدم هذا الترحيل NULL NOT DISTINCT على فهرس في جدول problem_check_trackers. DEV: Fix problem check tracker unique index not respecting NULLs by Drenmi · Pull Request #29169 · discourse/discourse · GitHub

ما هي المشكلة؟

افتراضيًا، عند التحقق من التفرد على صف لغرض فرض فهرس فريد، تعتبر PostgreSQL قيم NULL قيمًا مميزة. بسبب هذا، يمكن أن يكون لدينا بشكل غير صحيح إدخالات متعددة مع { identifier: "rails_env", target: nil } تم إنشاؤها بسبب ظروف السباق. سيؤدي هذا بعد ذلك إلى حدوث أخطاء في وقت التشغيل.

كيف يحل هذا المشكلة؟

إسقاط الفهرس الحالي وإعادة إنشائه بخيار NULLS NOT DISTINCT.

مشكلة

ومع ذلك، تم تقديم NULLS NOT DISTINCT في Postgres 15 beta2. الإصدار الحالي من Postgres في تثبيت قياسي هو Postgres 13 وهذا لا يدعم هذه الميزة.

عواقب

  • لن يكون لهذا التغيير أي تأثير على PG13 نظرًا لأنه سيتم تجاهل NULLS NOT DISTINCT (المصدر)
  • محاولة استعادة نسخة احتياطية من خادم PG15 إلى خادم PG13 ستفشل مع الخطأ التالي
ERROR:  syntax error at or near "NULLS"
LINE 1: ...m_check_trackers USING btree (identifier, target) NULLS NOT ...
^
EXCEPTION: psql failed:                                                              ^
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'

(السطر الكامل: CREATE UNIQUE INDEX index_problem_check_trackers_on_identifier_and_target ON public.problem_check_trackers USING btree (identifier, target) NULLS NOT DISTINCT;)

@tgxworld @drenmi

9 إعجابات

@drenmi يبدو أن علينا التراجع عن الترحيل وإعادة النظر في حل آخر. هذا ربما يتسبب في فشل التثبيتات المستضافة ذاتيًا.

8 إعجابات

لدي طلب سحب هنا والذي يجب أن يعمل أيضًا لـ PG13. :pray:

ما زلنا نفكر في مدى واقعية هذه الحالة في الاستخدام الفعلي، ومقدار الاستثمار الذي يجب أن نقوم به لتجاوزها. :pray:

إعجاب واحد (1)

حسنًا، لا يمكنني التحدث نيابة عن الآخرين ولا أعرف ما إذا كنت ممثلاً حقيقيًا (ربما لا)، لكنني صادفتها مرتين في غضون 3 أيام بعد إجراء هذا التغيير…

لذلك، سيكون الحل البديل (والتراجع!) موضع تقدير كبير.

إعجاب واحد (1)

الآن بعد أن أصبح لدينا الحل البديل، والذي يجب أن يعمل على PG15 أيضًا، يجب أن نكون قادرين على إزالة NULLS NOT DISTINCT.

من باب الفضول، ما الذي كنت تفعله والذي استلزم استعادة نسخة احتياطية من PG15 على PG13؟ :slightly_smiling_face: (لن يؤثر ذلك على المهمة أعلاه، فقط أحاول فهم ما يحدث “في البرية” قدر الإمكان.)

إعجاب واحد (1)

كان لدينا عميل واحد يحاول استعادة نسخة احتياطية (أعتقد أنهم كانوا يستضيفون بأنفسهم وكانوا يحاولون أشياء تتجاوز مستوى معرفتهم :upside_down_face:) ، وكان لدينا عميل آخر طلب منا إعداد موقع مرحلي لأغراض تطوير الإضافات المخصصة وأخذنا نسخة احتياطية من استضافة CDCK.

بشكل عام ، تعمل آلية الإصدار المضمنة في بيانات النسخ الاحتياطي بشكل جيد للغاية في تحديد ما إذا كان شيء ما سينهار أم لا بشكل استباقي ، ولكن هذه الأنواع من المواقف * تشبه الألغام :slight_smile:

\u003csmall\u003e(* في الواقع ، الشيء الوحيد الآخر الذي يمكنني التفكير فيه والذي لا تغطيه إصدارات الترحيل هو عندما يتم إدخال ترحيل بتاريخ أقدم في الملف الرئيسي ، ولكن هذا خارج الموضوع)

3 إعجابات

شكراً على المعلومات @RGJ! :pray:

طلب سحب الميزة (PR) لإزالة NULLS NOT DISTINCT OPTION متاح:

3 إعجابات

يمكنني رؤية أن المشكلة قد تم حلها بالفعل، ولكن لإضافة تجربة واقعية: واجهت هذه المشكلة أثناء محاولة استعادة نسخة احتياطية تم إنشاؤها على مثيل مستضاف من Discourse إلى حاوية تطوير قمت بإعدادها محليًا باستخدام Docker كجزء من إعداد بيئة تطوير. يبدو أن استضافة Discourse تعمل بنظام PG 15 ولكن بيئة التطوير تعمل بنظام 13؟

إعجابَين (2)

نعم، هذه هي جذور المشكلة، نحتاج إلى تحديث حاوية المصدر المفتوح الخاصة بنا إلى 15. سنقوم بذلك خلال الأشهر القليلة القادمة.

4 إعجابات

تم إغلاق هذا الموضوع تلقائيًا بعد 9 أيام. لم يعد يُسمح بالردود الجديدة.