فشل الترقية PG::UniqueViolation -- تعذر إنشاء فهرس فريد "unique_post_links_ccnew"

لدي تثبيت قياسي يفشل في الترقية إلى 2.8.0.beta2 مع الخطأ التالي:

PG::UniqueViolation: ERROR:  could not create unique index "unique_post_links_ccnew"

يأتي هذا من

I, [2021-06-25T18:35:47.756688 #1]  INFO -- : == 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrating ============

لا يبدو أن الفهرس تالف.

هل هذا يساعد؟

[6] pry(main)> TopicLink.where(url: bad_url).pluck(:id, :topic_id, :post_id, :user_id)
=> [[15733, 14351, 63616, 911], [16131, 14505, 63986, 911], [27141, 14505, 63986, 1152]]

لقد انتهيت بإضافة badX إلى عناوين URL المكررة فقط، وعندها نجح الأمر. لست متأكدًا تمامًا من المشاكل التي قد يسببها هذا في المستقبل…

الكثير من أخطاء تلف الفهرس التي يطلق عليها “مستحيلة” في الإصدارات القديمة من Postgres، حسب تجربتنا. هل ما زلت ترى هذا؟

أعتقد أنني لم أرها منذ الترقية إلى pg12.

لقد ذهبنا إلى PG13، وأعتقد أن هذا حل المشكلة (الفهارس التالفة) إلى حد كبير بالنسبة لنا @sam؟

@saj توصل إلى حل لهذه المشكلة. لقد قمنا بحلها في البنية التحتية الخاصة بنا. وقد تجاوز معظم المستضيفين الذاتيين الأمر بالفعل.

الآلية التي استخدمناها في الماضي لترقية PG في صورتنا مفتوحة المصدر كانت بها بعض المشكلات المتعلقة بالسلامة بسبب تغيير libc تحت الغطاء بين إصدارات PG.

أعتقد أن المشكلة قد اختفت الآن إلى حد كبير في النظام البيئي الأوسع، على الرغم من أن بعض الترقيات القديمة قد لا تزال تواجهها. سيكون من الكابوس إصلاح البرنامج النصي الحالي لترقية المصدر المفتوح والتعامل مع المصفوفة الهائلة لترقيات PG.

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