Falló la migración predeterminada
#<StandardError: Ha ocurrido un error, todas las migraciones posteriores se cancelaron:
PG::UniqueViolation: ERROR: se viola el valor de clave duplicado en la restricción única «index_user_emails_on_email»
DETAIL: Key (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com>) already exists.
/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: migrating ====
-- 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")
Migrating secondsite
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
Oh … ya hemos visto esto antes en las actualizaciones de versiones principales de PG. @saj trabajó recientemente en algo aquí.
La larga historia es que en algunas actualizaciones de PG, la intercalación de la base de datos cambia y se debe a que libc cambia cosas. No tienes más remedio que volver a indexar.
Lo que te pasó es que:
Hiciste una actualización importante
Tu índice se corrompió un poco
Se realizó una segunda inserción de un usuario para talk@remobjects.com - ahora tienes una fila duplicada a pesar de que el índice lo prohíbe.
Tocamos la fila y esto resalta el problema porque no puede actualizar una columna no relacionada.
La solución es:
Encuentra los IDs de los 2 usuarios que comparten el correo electrónico talk@remobjects.com.
Elimina o renombra el correo electrónico de uno de ellos.
Continúa como estaba planeado.
Realiza una reindexación completa de la base de datos urgentemente para detectar otros problemas.
Tu solución lo resolvió, pero la “actualización” ya pasó (y no hay más actualizaciones); ¿necesito hacer algo especial para volver a ejecutar estas migraciones? Yo, por supuesto, eliminé los correos electrónicos duplicados.