Falha na atualização: versão 13 do PostgreSQL ... não compatível com ... versão 10.12

Tenho um pequeno fórum, themooster.net, baseado no Discourse, que não atualizava há alguns meses.

Cliquei em “Atualizar” na recomendação do “Admin” para fazer a atualização, e foi dito que eu deveria executá-la no prompt do shell, fornecendo-me três linhas para rodar:

    cd /var/discourse
    git pull
    ./launcher rebuild app

Executei esses três comandos. O “rebuild app” falhou inicialmente porque não tinha 5 GB de espaço livre na minha pequena caixa Linode, então adicionei mais espaço em disco e o “rebuild app” pareceu concluir normalmente.

Mas o site não voltou.

Olhei ao redor, reiniciei, ainda não estava subindo, olhei um pouco mais.

Parece que o nginx frontend está subindo corretamente, mas quando tento acessar meu fórum pela web, como um usuário normal, recebo um erro “502 Bad Gateway” do frontend nginx.

O arquivo “/var/discourse/shared/standalone/log/var-log/postgres/current” está cheio de erros como:

2021-04-17 13:54:37.785 UTC [7095] FATAL: os arquivos do banco de dados são incompatíveis com o servidor
2021-04-17 13:54:37.785 UTC [7095] DETAIL: O diretório de dados foi inicializado pela versão 13 do PostgreSQL, que não é compatível com esta versão 10.12 (Debian 10.12-2.pgdg100+1).

Tenho boas cópias de segurança do fórum no meu diretório:
/var/discourse/shared/standalone/backups/default

O que devo fazer agora?

Veja atualização do PostgreSQL 13

Vou verificar seu link do PostgreSQL 13 agora — obrigado.

Existe alguma maneira de eu ter sabido ou poder ter sabido dessa complicação sem ser um administrador em tempo integral, acompanhando constantemente a atividade das tecnologias principais (PostgreSQL, Ruby, Linux, …) por trás do Discourse?

Se sim, as três linhas de instrução (cd /var/discourse; …) poderiam ter uma linha adicional: “Aviso: verifique primeiro aqui para outras informações que possam se aplicar.”

Se não, o Discourse deveria ser mais transparente sobre o fato de não ser bem adequado para uso casual.

Vou tentar ler a página de atualização do PostgreSQL 13 que você gentilmente linkou mais algumas vezes.

Mas, nas primeiras leituras… estou meio totalmente perdido. Não faço ideia de quais seções daquela página podem se aplicar à minha situação (se houver alguma).

Por exemplo, essa página de atualização do PostgreSQL 13 está (razoavelmente, eu suporia) focada na atualização do PostgreSQL 12 para o 13. Minha mensagem de erro:

O diretório de dados foi inicializado pela versão 13 do PostgreSQL, que não é compatível com esta versão 10.12 (Debian 10.12-2.pgdg100+1).

fala da versão 10.12… isso é PostgreSQL 10 ou PostgreSQL 12 (eu normalmente leria “10.12” como sendo principalmente 10, não 12).

Aha - meu arquivo:

/var/discourse/shared/standalone/postgres_data_old/PG_VERSION

tem o valor “10”.

Portanto, o link acima do PostgreSQL 13, na medida em que se aplica a uma atualização de 12 ==> 13, não é necessariamente relevante, pelo que sei (o que não é muito.)

Estou com uma péssima sensação sobre isso … como tentar consertar munições militares vivas, em uma caverna escura, sem instruções, sem treinamento e nem mesmo tendo certeza de que tipo de munição estou trabalhando.

Este comentário, no qual acabei esbarrando aleatoriamente assim:

https://meta.discourse.org/t/how-do-i-manually-update-discourse-and-docker-image-to-latest/23325/238?u=thepythoniccow

“Você deve reconstruir novamente. Minha suposição é que você ignorou uma mensagem sobre a atualização do postgres.”

Me fez pensar que deveria tentar novamente o “cd /var/discourse; git pull; ./launcher rebuild app”… aparentemente esse “rebuild” pode ser tentado várias vezes.

Desta vez, capturei a saída. No entanto, GARANTO que ignorei a maioria das mensagens na saída. Apenas o comando “./launcher rebuild app” gerou 2020 linhas de saída. Levaria um mês de domingos para eu aprender quais programas estão rodando e o que significam todas as mensagens de saída. Não há uma maneira prática de eu saber se estou ignorando algo crítico nessa saída.

No entanto…

Funcionou!!

Meu site voltou a funcionar, rodando a versão atual do software.

Então, a lição do dia: Se o comando “./launcher rebuild app” falhar em fornecer um site funcional, tente novamente.

Ah. Desculpe, não pensei em te contar o que disse àquele cara!

:tada: Ótimo! Fico muito feliz que você conseguiu!

Sim. Essa pode ser a única outra coisa que você precisa saber. :slight_smile:

Fico feliz que você esteja de volta no ar!