Falha na migração ao atualizar para a versão mais recente de ~3 semanas atrás

1 migração falhou!

Falha ao migrar padrão
#<StandardError: Ocorreu um erro, todas as migrações posteriores foram canceladas:

PG::UniqueViolation: ERRO:  a chave duplicada viola a restrição de chave exclusiva "index_user_emails_on_email"
DETALHE:  A chave (lower(email::text))=(talk@remobjects.com<mailto:talk@remobjects.com) já existe.

/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: migrando ====================
-- 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")
Migrando secondsite
Docker Manager: FALHA AO ATUALIZAR
#<RuntimeError: RuntimeError>

Alguém sabe o que posso fazer para resolver isso?

Oh… nós já vimos isso antes em atualizações de versão principal do PG. O @saj trabalhou recentemente em algo aqui.

A longa história é que em algumas atualizações do PG, a collation do banco de dados muda por baixo dos panos e devido a mudanças na libc. Você não tem escolha a não ser reindexar.

O que aconteceu com você foi que:

  1. Você fez uma atualização principal
  2. Seu índice ficou um tanto corrompido
  3. Uma segunda inserção de um usuário para talk@remobjects.com foi feita - você agora tem uma linha duplicada, apesar do índice não permitir.
  4. Nós tocamos na linha e isso destaca esse problema, pois não podemos atualizar uma coluna não relacionada.

Correção é:

  • Encontre os IDs dos 2 usuários que compartilham o e-mail talk@remobjects.com.
  • Exclua ou renomeie o e-mail em um deles.
  • Prossiga como planejado.
  • Faça uma reindexação completa do banco de dados urgentemente para capturar outros problemas.

Sua solução resolveu o problema, mas o “upgrade” já passou (e não há mais atualizações); preciso fazer algo especial para reexecutar essas migrações? Eu, é claro, deletei os e-mails duplicados.

Sim, certifique-se de executar uma reindexação do banco de dados

Tente:

REINDEX DATABASE VERBOSE

É crucial que você o faça para garantir que seus índices estejam em boas condições.

1 curtida

Existe alguma forma de verificar se um fórum está “saudável” de tempos em tempos, antes de se deparar com esse tipo de problema?

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