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.

1 Mi Piace

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

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