E aí, pessoal! Estou realmente torcendo para que alguém possa me ajudar com uma migração do Flarum para o Discourse que estou fazendo. Eu “hackeei” minha maneira através de uma enorme quantidade de conhecimento que me faltava e resolvi alguns erros baseados em suposições que o importador atual parece fazer (por exemplo, prefixos de banco de dados). Depois de tudo isso, consegui importar tanto as Categorias quanto os Usuários!
Mas agora estou tendo problemas para importar os Tópicos em si, que, é claro, são uma das coisas mais importantes. E, infelizmente, estou encontrando muito pouco sobre a mensagem de erro específica que estou recebendo. Há apenas um tópico mais antigo aqui no Meta que nunca recebeu resposta, então não há ajuda por lá. Espero que eu possa ter mais sorte.
Aqui está a mensagem de erro completa. A parte perto do final parece ser o ponto crítico. O “valor de chave duplicada” identificado realmente parece muito vago, então estou travado. Obrigado antecipadamente por qualquer insight que vocês possam fornecer!
Ocorreu um erro ao carregar ./script/import_scripts/flarum_import.rb.
Failure/Error: return exec_without_profiling(*args, &blk) unless SqlPatches.should_measure?
PG::InFailedSqlTransaction:
ERROR: transação atual falhou, comandos ignorados até o fim do bloco de transação
# ./script/import_scripts/base.rb:243:in `ensure in block in all_records_exist?'
# ./script/import_scripts/base.rb:243:in `block in all_records_exist?'
# ./script/import_scripts/base.rb:224:in `all_records_exist?'
# ./script/import_scripts/flarum_import.rb:122:in `block in import_posts'
# ./script/import_scripts/base.rb:874:in `block in batches'
# ./script/import_scripts/base.rb:873:in `loop'
# ./script/import_scripts/base.rb:873:in `batches'
# ./script/import_scripts/flarum_import.rb:101:in `import_posts'
# ./script/import_scripts/flarum_import.rb:32:in `execute'
# ./script/import_scripts/base.rb:47:in `perform'
# ./script/import_scripts/flarum_import.rb:162:in `<top (required)>'
# ------------------
# --- Causado por: ---
# PG::UniqueViolation:
# ERROR: valor de chave duplicada viola a restrição única "import_ids_pkey"
# DETAIL: Chave (val)=(3) já existe.
# ./script/import_scripts/base.rb:231:in `block in all_records_exist?'
Nenhum exemplo encontrado.
Finalizado em 0,00004 segundos (os arquivos levaram 5,56 segundos para carregar)
0 exemplos, 0 falhas, 1 erro ocorreu fora dos exemplos
Parece ser um índice corrompido, o que é surpreendente. Qual versão do PostgreSQL é essa? Provavelmente eu apagaría o banco de dados e tentaria novamente. Você provavelmente precisará fazer isso várias vezes de qualquer maneira, enquanto depura outros problemas com tópicos.
A outra opção é tentar reconstruir esse índice e excluir registros duplicados até que funcione.
Obrigado, Jay! Infelizmente, perdi essa instalação do Discourse devido, bem, à minha própria imprudência (manuseio inadequado de uma máquina virtual). Então, não consigo voltar para verificar, nem aplicar as soluções de problemas recomendadas por você, o que me faz sentir bastante mal/estúpido. Mas é assim que as coisas ficaram.
O que posso te dizer é que segui as instruções de configuração do Discourse no Ubuntu:
Portanto, seria qualquer versão do Postgres instalada dessa maneira. E eu já havia tentado importar algumas vezes até agora, sem limpar o banco de dados entre as tentativas, então talvez isso tenha algo a ver com o problema.
Segui o método de ambiente de desenvolvimento no Ubuntu em vez de usar a abordagem Docker porque, quando tentei isso antes (no Digital Ocean), nenhuma das instruções que encontrei sobre como fazer, bem, qualquer coisa, estava funcionando, pois, presumivelmente, tudo estava dentro do Docker/containers e exigia uma abordagem diferente.
Estou operando, infelizmente, nos limites do meu entendimento, mas parecia valer a pena tentar fazer sozinho. Com esse grande revés e o conhecimento de que provavelmente há mais etapas de solução de problemas pela frente, acho que é muito provável que seja hora de buscar ajuda profissional. Então, vou tentar conseguir um orçamento para isso.