Migrazione fallita aggiornando all'ultima da circa 3 settimane fa.

1 migrazione fallita!

Impossibile eseguire la migrazione predefinita
#<StandardError: Si è verificato un errore, tutte le migrazioni successive sono state annullate:

PG::UniqueViolation: ERRORE:  la violazione della chiave univoca viola il vincolo univoco "index_user_emails_on_email"
DETTAGLIO:  La chiave (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com) esiste già.
/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: migrazione ====================
-- 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")
Migrazione secondsite
Docker Manager: AGGIORNAMENTO FALLITO
#<RuntimeError: RuntimeError>

Qualcuno sa cosa posso fare per superare questo problema?

Oh… abbiamo già visto questo in passato nei principali aggiornamenti di versione di PG. @saj ha recentemente lavorato su qualcosa qui.

La lunga storia è che in alcuni aggiornamenti di PG la collation del database cambia sotto di te e a causa di libc che cambia le cose. Non hai altra scelta che reindicizzare.

Quello che ti è successo è che:

  1. Hai eseguito un aggiornamento importante
  2. Il tuo indice è diventato in qualche modo corrotto
  3. È stata effettuata una seconda inserzione di un utente per talk@remobjects.com - ora hai una riga duplicata nonostante l’indice lo vieti.
  4. Tocchiamo la riga e questo evidenzia il problema perché non può aggiornare una colonna non correlata

La soluzione è:

  • Trova gli ID utente dei 2 utenti che condividono l’email talk@remobjects.com.
  • Elimina o rinomina l’email su uno di loro
  • Procedi come previsto
  • Esegui urgentemente una reindicizzazione completa del database per individuare altri problemi

La tua soluzione ha risolto il problema, ma l’“aggiornamento” è già passato (e non ci sono più aggiornamenti); devo fare qualcosa di speciale per rieseguire queste migrazioni? Ho ovviamente eliminato le email duplicate.

Sì, assicurati di eseguire un reindicizzazione del database

Prova:

REINDEX DATABASE VERBOSE

È fondamentale farlo per garantire che tutti i tuoi indici siano in buone condizioni.

C’è un modo per verificare di tanto in tanto che un forum sia “sano”, prima di incorrere in questo tipo di problemi?