Échec de la mise à niveau PG::UniqueViolation -- impossible de créer l'index unique "unique_post_links_ccnew"

J’ai une installation standard qui échoue lors de la mise à niveau vers 2.8.0.beta2 avec cette erreur :

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

Cela provient de :

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

Cela ne ressemble pas à un index corrompu.

Est-ce que cela aide ?

[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]]

J’ai fini par ajouter un badX aux URLs dupliquées, et cela a fonctionné. Je ne suis pas tout à fait clair sur les problèmes que cela pourrait générer à l’avenir…

Beaucoup de bugs de corruption d’index dits « impossibles » dans les anciennes versions de Postgres, d’après notre expérience. En voyez-vous toujours ?

Je pense que je ne l’ai pas vu depuis la mise à niveau vers pg12.

Nous sommes allés jusqu’à PG13, et je pense que cela a surtout résolu le problème (index corrompus) pour nous, n’est-ce pas @sam ?

@saj a résolu ce problème. Nous l’avons résolu dans notre infrastructure. La plupart des auto-hébergeurs l’ont depuis contourné.

Le mécanisme que nous utilisions auparavant pour mettre à niveau PG dans notre image open source présentait des problèmes de sécurité inhérents en raison des changements de libc sous le capot entre les versions de PG.

Je pense que le problème a maintenant largement disparu dans l’écosystème, bien que certaines anciennes mises à niveau puissent encore y être confrontées. Ce sera un cauchemar de corriger notre script de mise à niveau open source existant et de gérer l’énorme matrice des mises à niveau PG.

Cela dit, au moins nous sommes très conscients de la source du problème maintenant et sommes mieux placés pour y remédier à l’avenir.