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:
Hai eseguito un aggiornamento importante
Il tuo indice è diventato in qualche modo corrotto
È stata effettuata una seconda inserzione di un utente per talk@remobjects.com - ora hai una riga duplicata nonostante l’indice lo vieti.
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.