¿Cómo se ejecutan consultas SQL si el contenedor no se inicia? (reconstrucción fallida)

Hola.

Intenté ejecutar actualizaciones y reconstruir, pero terminé con este hermoso error:

I, [2023-01-18T08:05:48.701709 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1]  INFO -- :
I, [2023-01-18T08:05:52.431807 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR:  no se pudo crear el índice único "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL:  La clave (name)=(vuejs) está duplicada.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT:  REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: Se ha producido un error, todas las migraciones posteriores se cancelaron:

PG::UniqueViolation: ERROR:  no se pudo crear el índice único "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL:  La clave (name)=(vuejs) está duplicada.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'

Hay otros temas en el foro con problemas similares (1, 2, 3) pero cuando intento entrar en el contenedor obtengo esto:

/var/discourse# ./launcher enter app
Se detectó la arquitectura x86_64.
Error: No such container: app

Por lo tanto, no puedo eliminar los índices manualmente.

¿Alguna otra sugerencia sobre qué enfoque debería tomar a continuación?

2 Me gusta

Hola Ionut,

Gracias por el informe de errores. Le echaré un vistazo, pero creo que hay un problema con un índice en tu base de datos y una migración reciente intenta solucionarlo, pero algunos problemas no se pueden solucionar sin intervención humana.

Creo que el commit que introdujo la migración que falla es este:

Puedes intentar fijar tu instancia de Discourse a la versión anterior, que es el commit 690e2f15ab9549486aaa6750e1093c1336bf17f2. Edita tu archivo app.yml y establece la clave version bajo params. ¡Asegúrate de descomentar esa clave también!

Entonces, todo debería iniciarse y deberías poder eliminar la etiqueta duplicada vuejs, pero eso podría tener algunos efectos no deseados si la etiqueta duplicada está en uso. Intentaremos encontrar una mejor solución, pero esto debería funcionar hasta entonces.

2 Me gusta

Después de arrancar, pude encontrar todas las etiquetas duplicadas con el plugin Data Explorer:

SELECT name, count(*)
    FROM tags
    GROUP BY name
     HAVING count(*) > 1

Por alguna razón, había unas diez etiquetas duplicadas. Me pregunto por qué y cómo aparecieron allí en primer lugar

Logré eliminar esas basuras, eliminé el bloqueo de versión del archivo yml, reconstruí, las cosas parecen estar bien ahora.

¡Gracias!

:+1:

5 Me gusta

Hemos visto esto en el pasado, es un problema de pesadilla pero lo hemos aislado a que está relacionado con las actualizaciones.

La estructura del índice en PG depende de la configuración regional en el momento de la instalación y las actualizaciones pueden ser una pesadilla a veces.

Si el reindex no se realiza lo suficientemente pronto, pueden surgir problemas. Algunas de nuestras primeras actualizaciones de Docker de PG no lo ejecutaron… y algunas instalaciones antiguas, lamentablemente, tienen una pequeña bomba de tiempo.

Esto está mayormente resuelto hoy en día en el ecosistema, pero queda algo de dolor.

2 Me gusta

Quizás esto pueda ayudar a identificar mejor la causa, así que aquí hay más detalles sobre el sistema:

La instalación es ciertamente antigua, desde 2014, pero el sistema se actualiza al menos una vez al mes (aunque normalmente es cada dos semanas). Por lo tanto, nunca se omitió una versión principal.

No hay bloqueo de versión, por lo que básicamente estamos ejecutando la última versión disponible en la rama main (¡YOLO!).

Aunque probamos muy pocos no oficiales hace un tiempo, todos los plugins instalados son oficiales y ha sido así durante los últimos… 5 años o más.

1 me gusta

Tengo el mismo problema, te he seguido hasta esta frase.

¿Cómo eliminas realmente los duplicados? ¿Simplemente emitiendo una sentencia SQL delete en Data Explorer? ¿Qué pasa con los registros de tablas externas que apuntan a esta etiqueta?

Actualización 1

OK, veo que no puedes ejecutar sentencias update.

Ahora he usado la GUI y simplemente he renombrado la etiqueta.

Edita la etiqueta (yendo a /tag/foo) y renómbrala o elimínala.

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