Échec de la migration lors de la mise à niveau vers la dernière version datant d'environ 3 semaines

1 migration a échoué !

Échec de la migration par défaut
#<StandardError: Une erreur s'est produite, toutes les migrations ultérieures sont annulées :

PG::UniqueViolation : ERREUR :  la valeur de clé dupliquée viole la contrainte d'unicité « index_user_emails_on_email »
DÉTAIL :  La clé (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com) existe déjà.

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_st

== 20211201221028 MigrateEmailToNormalizedEmail : migration en cours ====================
-- execute("UPDATE user_emails\nSET normalized_email = REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')\nWHERE (normalized_email IS NULL OR normalized_email <> (REPLACE(REGEXP_REPLACE(email,'([+@].*)',''),'.','') || REGEXP_REPLACE(email, '[^@]*', '')))\n  AND (id >= -2 AND id < 7155)\n")
Migration de secondsite
Docker Manager : ÉCHEC DE LA MISE À NIVEAU
#<RuntimeError: RuntimeError>

Quelqu’un sait ce que je peux faire pour dépasser ça ?

Oh… nous avons déjà vu cela lors des mises à niveau majeures de PG. @saj a récemment travaillé sur quelque chose ici.

En bref, lors de certaines mises à niveau de PG, la collation de la base de données change en arrière-plan et cela est dû à des changements dans libc. Vous n’avez d’autre choix que de réindexer.

Ce qui vous est arrivé est que :

  1. Vous avez effectué une mise à niveau majeure
  2. Votre index est devenu quelque peu corrompu
  3. Une deuxième insertion d’un utilisateur pour talk@remobjects.com a été effectuée - vous avez maintenant une ligne en double malgré l’index qui le refuse.
  4. Nous touchons la ligne et cela met en évidence ce problème car il ne peut pas mettre à jour une colonne non liée

Correction :

  • Trouvez les identifiants des 2 utilisateurs partageant l’e-mail talk@remobjects.com.
  • Supprimez ou renommez l’e-mail sur l’un d’eux.
  • Procédez comme prévu.
  • Effectuez une réindexation complète de la base de données de toute urgence pour détecter d’autres problèmes.

Votre solution a résolu le problème, mais la « mise à niveau » est déjà passée (et il n’y a plus de mises à jour) ; dois-je faire quelque chose de spécial pour réexécuter ces migrations ? J’ai bien sûr supprimé les e-mails en double.

Oui, assurez-vous d’effectuer un réindexage de la base de données

Essayez :

REINDEX DATABASE VERBOSE

Il est essentiel de le faire pour vous assurer que vos index sont en bon état.

1 « J'aime »

Existe-t-il un moyen de vérifier de temps en temps qu’un forum est « sain », avant de rencontrer ce genre de problème ?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.