Tudo certo, conseguimos sair do outro lado e estamos de volta online. Obrigado pelas dicas @Falco.
Para ajudar outras pessoas com seus problemas, aqui está um resumo do que fizemos.
Tivemos alguns índices corrompidos que causaram falha na importação. Conseguimos corrigir manualmente excluindo os duplicados. Também tínhamos 8 usuários com username_lower duplicado (muitos “mike” e “marco”). Renomeamos esses usuários atualizando tanto username quanto username_lower. Pelos dados dos usuários, notamos que a primeira corrupção ocorreu em dezembro de 2019.
Em vez de seguir o ciclo “fazer backup” → “restaurar backup” → “falhar por duplicidade” → “corrigir”, decidimos reindexar todos os índices. Encontramos todos os índices com restrições de unicidade usando a seguinte consulta:
select idx.relname as index_name,
insp.nspname as index_schema,
tbl.relname as table_name,
tnsp.nspname as table_schema
from pg_index pgi
join pg_class idx on idx.oid = pgi.indexrelid
join pg_namespace insp on insp.oid = idx.relnamespace
join pg_class tbl on tbl.oid = pgi.indrelid
join pg_namespace tnsp on tnsp.oid = tbl.relnamespace
where pgi.indisunique -- << apenas índices únicos
and tnsp.nspname = 'public'
Assim que todos os índices funcionaram, conseguimos fazer um backup e importá-lo corretamente na nova instância. As migrações foram executadas conforme o esperado, trocamos as instâncias e tudo voltou a funcionar
Um brinde à resiliência do Discourse ![]()
Obrigado novamente @Falco.
Tenham um bom fim de semana ![]()