É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 :
Vous avez effectué une mise à niveau majeure
Votre index est devenu quelque peu corrompu
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.
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.