Hola a todos, espero mucho que alguien pueda ayudarme con una migración de Flarum a Discourse en la que estoy trabajando. He sorteado una gran cantidad de conocimientos que me faltaban y he resuelto algunos errores basándome en suposiciones que parece hacer el importador actual (por ejemplo, prefijos de base de datos). Tras todo eso, ¡logré importar tanto las Categorías como los Usuarios!
Pero ahora tengo problemas para importar los Temas en sí, que, por supuesto, son una de las cosas más importantes. Y, por desgracia, estoy encontrando muy poco sobre el mensaje de error específico que estoy recibiendo. Hay uno tema antiguo aquí en Meta que nunca recibió respuesta, así que no hay ayuda allí. Espero poder hacerlo mejor.
Aquí está el mensaje de error completo. La parte cerca del final parece ser el punto crítico. El “valor de clave duplicada” que se identifica realmente parece muy vago, así que estoy atascado. ¡Gracias de antemano por cualquier información que puedan proporcionar!
Se produjo un error al cargar ./script/import_scripts/flarum_import.rb.
Failure/Error: return exec_without_profiling(*args, &blk) unless SqlPatches.should_measure?
PG::InFailedSqlTransaction:
ERROR: la transacción actual está abortada, los comandos se ignoran hasta el final del bloque de transacción
# ./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: el valor de clave duplicada viola la restricción única "import_ids_pkey"
# DETALLE: La clave (val)=(3) ya existe.
# ./script/import_scripts/base.rb:231:in `block in all_records_exist?'
No se encontraron ejemplos.
Finalizado en 0.00004 segundos (los archivos tardaron 5.56 segundos en cargarse)
0 ejemplos, 0 fallos, 1 error ocurrido fuera de los ejemplos
Suena como un índice corrupto, lo cual es sorprendente. ¿Qué versión de PostgreSQL es esta? Probablemente lo mejor sería borrar la base de datos e intentarlo de nuevo. De todos modos, es probable que tengas que hacerlo varias veces mientras depuras otros problemas con los temas.
La otra opción es intentar reconstruir ese índice y eliminar los registros duplicados hasta que funcione.
¡Gracias, Jay! Lamentablemente perdí esta instalación de Discourse debido a, bueno, una imprudencia mía (mal manejo de una máquina virtual). Así que no puedo volver atrás para verificarlo ni seguir los pasos de solución de problemas que recomiendas, lo cual me hace sentir bastante mal/tonto. Pero así son las cosas.
Lo que sí puedo decirte es que seguí las instrucciones de configuración de Discourse en Ubuntu:
Por lo tanto, sería la versión de Postgres que se instala de esa manera. Además, había intentado importar un par de veces hasta ese momento, sin limpiar la base de datos entre intentos, así que quizás eso tenga algo que ver.
Opté por el método de entorno de desarrollo en Ubuntu en lugar de usar el enfoque de Docker porque cuando lo intenté antes (en Digital Ocean), ninguna de las instrucciones que encontraba sobre cómo hacer, bueno, nada, funcionaba, presumiblemente porque estaba dentro de Docker/contenedores y requería un enfoque diferente.
Desafortunadamente, estoy operando al límite de mi comprensión, pero sentí que valía la pena al menos intentarlo por mi cuenta. Con este gran revés y sabiendo que probablemente habrá más pasos de solución de problemas por delante, creo que es muy probable que sea momento de buscar ayuda profesional. Así que me voy a intentar conseguir un presupuesto para eso.