Urgente, falha na build atualizada UniqueViolation

Tentei atualizar o Discourse e obtive a seguinte mensagem:

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: An error has occurred, this and all later migrations canceled:

Tentei executar ./launcher enter app e su postgres -c 'psql discourse', mas obtive o seguinte erro:

psql: erro: não foi possível conectar ao servidor: não foi possível conectar ao servidor: Arquivo ou diretório não encontrado
O servidor está rodando localmente e aceitando
conexões no socket de domínio Unix “/var/run/postgresql/.s.PGSQL.5432”?

Você tem alguma ideia, @merefield? Obrigado!

Olá.

Quando uma atualização falha, o container fica parado. (Tente conectar ao seu site pelo navegador e verá que é isso mesmo)

Então, talvez você simplesmente não tenha iniciado o último container funcional. (Pré-atualização)

Faça isso com ./launcher start app, depois entre no container e tente acessar a interface de linha de comando do banco de dados.

Obrigado, eu reiniciei o contêiner. Alguma ideia? Tentei ./launcher enter app. Há mais alguma coisa que eu possa tentar?

ubuntu@:/var/discourse$ ./launcher start app
AVISO: A versão do Docker 17.05.0-ce está obsoleta …
Nada a fazer, seu contêiner já foi iniciado!

Você recebeu um erro ao entrar no container?

Sem erro, mas ao executar ./launcher logs app, obtive o seguinte -

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normalmente em execução, deseja em execução
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normalmente em execução, deseja em execução
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
supervisor pid: 1847 unicorn pid: 1857
config/unicorn_launcher: linha 71: kill: (1857) - Processo inexistente
config/unicorn_launcher: linha 15: kill: (1857) - Processo inexistente
(1847) encerrando
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normalmente em execução, deseja em execução
ok: run: redis: (pid 47) 945s

Qual é o 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

Devo executá-lo dentro do contêiner ou diretamente na máquina Linux?

Dentro. Parece que não está em execução.

Provavelmente, você precisará reiniciá-lo manualmente, como usuário postgres.

Você sabe o comando rápido para reiniciá-lo?

Você pode tentar:

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main - substituindo o 13 pela sua versão atual.

Que é o comando anunciado no processo de uma instalação saudável.

Sem garantia com isso, pois não o testei!

Não se preocupe em fazer isso, veja mais abaixo.

Obrigado. Tenho a versão 12, mas recebi o seguinte erro -

su: opção inválida – ‘D’
Tente ‘su --help’ para mais informações.

-D é um parâmetro válido.

Certifique-se de que você não incluiu o hífen fora do bloco de código?

Aliás, estou me perguntando se o processo de atualização para a versão 13 falhou.

Se sim, talvez queira dar uma olhada e, possivelmente, postar neste tópico: PostgreSQL 13 update

Sim, eu ainda estou na versão 12…

Desculpe, parece que isso está encapsulado e gerenciado por um processo de nível superior.

Se eu matar o meu, ele reinicia automaticamente.

tente: sv start postgres

como root

Você quer dizer executá-lo dentro de um container Docker? Obrigado.

Sim, é aí que o serviço está rodando.

Ainda melhor, faça o seguinte: sv restart postgres

Em seguida, verifique:

tail /var/log/postgres/current

Uma situação saudável se parecerá com algo assim:

2021-01-21 20:21:10.284 UTC [575368] LOG: database system is ready to accept connections em algum lugar ali.

Aqui está o log de erro -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: os arquivos do banco de dados são incompatíveis com o servidor
2021-01-21 18:12:04.965 UTC [623] DETAIL: O diretório de dados foi inicializado pela versão 13 do PostgreSQL, que não é compatível com esta versão 12.3 (Debian 12.3-1.pgdg100+1).
pg_ctl: não foi possível iniciar o servidor
Examine a saída do log.