Urgente: Fallo en compilación actualizada UniqueViolation

Intenté actualizar Discourse y obtuve el siguiente mensaje:

I, [2021-01-21T18:39:25.045454 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2021-01-21 18:39:32.724 UTC [4051] discourse@discourse LOG:  duration: 336.116 ms  statement: UPDATE users
	SET locale = 'en_GB'
	WHERE locale = 'en'
	
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_users_on_username_lower"
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse DETAIL:  Key (username_lower)=(xyz123) already exists.
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse STATEMENT:  UPDATE users
	SET locale = 'en'
	WHERE locale = 'en_US'
	
rake aborted!
StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores fueron canceladas:

Intenté ejecutar ./launcher enter app y su postgres -c 'psql discourse', pero obtuve el siguiente error:

psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?

¿Tienes alguna idea, @merefield? ¡Gracias!

Hola.

Cuando una actualización falla, el contenedor queda detenido. (Intenta conectarte a tu sitio desde el navegador y verás que es así)

Es posible que simplemente no hayas iniciado el último contenedor funcional. (Antes de la actualización)

Hazlo con ./launcher start app, luego entra en el contenedor e intenta acceder a la CLI de la base de datos.

Gracias, reinicié el contenedor. ¿Alguna idea? Intenté ./launcher enter app. ¿Hay algo más que pueda probar?

ubuntu@:/var/discourse$ ./launcher start app
ADVERTENCIA: La versión de Docker 17.05.0-ce está obsoleta …
No hay nada que hacer, ¡tu contenedor ya se ha iniciado!

¿Obtuviste un error al ingresar al contenedor?

Sin error, pero al ejecutar ./launcher logs app obtuve lo siguiente -

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normalmente activo, se desea activo
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normalmente activo, se desea activo
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
supervisor pid: 1847 unicorn pid: 1857
config/unicorn_launcher: línea 71: kill: (1857) - No existe el proceso
config/unicorn_launcher: línea 15: kill: (1857) - No existe el proceso
(1847) saliendo
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normalmente activo, se desea activo
ok: run: redis: (pid 47) 945s

¿Cuál es el resultado de ps -ef | grep postgres?

root 38 35 0 19:09 ? 00:00:00 runsv postgres
root 46 38 0 19:09 ? 00:00:00 svlogd /var/log/postgres
root 2573 2571 0 19:31 ? 00:00:00 sv start postgres
root 2575 2497 0 19:31 ? 00:00:00 grep postgres

¿Debería ejecutarlo dentro del contenedor o directamente en la máquina Linux?

Dentro. Parece que no se está ejecutando.

Tendrás que reiniciarlo manualmente, lo sospecho, como usuario postgres.

¿Conoces el comando rápido para reiniciarlo?

Podrías intentar:

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main - reemplazando el 13 con tu versión actual.

Que es el comando anunciado en el proceso de una instalación saludable.

Sin garantía con eso, ya que no lo he probado.

No, no te molestes en hacer esto, consulta más abajo.

Gracias. Tengo la versión 12, pero obtuve el siguiente error -

su: opción no válida – ‘D’
Intente ‘su --help’ para más información.

-D es una opción válida.

Asegúrate de no haber incluido el guion fuera del fragmento de código.

Por cierto, me pregunto si el proceso de actualización a la versión 13 falló en tu caso.

Si es así, quizás te interese echar un vistazo y, posiblemente, publicar en este tema: PostgreSQL 13 update

Sí, todavía estoy en la versión 12…

Lo siento, parece que esto está encapsulado y gestionado por un proceso de nivel superior.

Si mato el mío, se reinicia automáticamente.

Intenta: sv start postgres

como root

¿Te refieres a ejecutarlo dentro de un contenedor Docker? Gracias.

Sí, es allí donde se está ejecutando el servicio.

Aún mejor, haz esto: sv restart postgres

Luego verifica:

tail /var/log/postgres/current

Una situación saludable se verá algo así:

2021-01-21 20:21:10.284 UTC [575368] LOG: database system is ready to accept connections en algún lugar de ahí.

Aquí está el registro de errores -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: los archivos de la base de datos son incompatibles con el servidor
2021-01-21 18:12:04.965 UTC [623] DETAIL: El directorio de datos fue inicializado por la versión 13 de PostgreSQL, que no es compatible con esta versión 12.3 (Debian 12.3-1.pgdg100+1).
pg_ctl: no se pudo iniciar el servidor
Examine la salida del registro.