O banco de dados da nossa instância do Discourse não é um contêiner local; em vez disso, usamos um cluster de banco de dados central. Recentemente, o PostgreSQL central foi atualizado para a versão 18.3. Percebi que o backup do Discourse agora falha:
[2026-05-19 03:37:37] [INICIADO]
[2026-05-19 03:37:37] O 'system' iniciou o backup!
[2026-05-19 03:37:37] Marcando o backup como em execução...
[2026-05-19 03:37:37] Garantindo que '/var/www/discourse/tmp/backups/default/2026-05-19-033737' exista...
[2026-05-19 03:37:37] Garantindo que '/var/www/discourse/public/backups/default' exista...
[2026-05-19 03:37:37] Atualizando metadados...
[2026-05-19 03:37:37] Despejando o esquema público do banco de dados...
[2026-05-19 03:37:37] pg_dump: erro: abortando devido a incompatibilidade de versão do servidor
[2026-05-19 03:37:37] pg_dump: detalhe: versão do servidor: 18.3 (Ubuntu 18.3-1.pgdg24.04+1); versão do pg_dump: 15.15 (Debian 15.15-1.pgdg12+1)
[2026-05-19 03:37:37] EXCEÇÃO: pg_dump falhou
[2026-05-19 03:37:37] /var/www/discourse/lib/backup_restore/creator.rb:173:in 'BackupRestore::Creator#dump_public_schema'
/var/www/discourse/lib/backup_restore/creator.rb:36:in 'BackupRestore::Creator#run'
/var/www/discourse/lib/backup_restore.rb:13:in 'BackupRestore.backup!'
/var/www/discourse/app/jobs/regular/create_backup.rb:10:in 'Jobs::CreateBackup#execute'
Isso parece ser uma incompatibilidade entre as versões do cliente/servidor do PostgreSQL.
O backup está sendo executado a partir do contêiner do Discourse, onde o pg_dump é da versão 15.15, mas o servidor PostgreSQL externo é da versão 18.3:
server version: 18.3; pg_dump version: 15.15
Eu teria cautela ao modificar o contêiner do Discourse, a menos que a equipe do Discourse recomende. Minha primeira reação seria manter o cluster de banco de dados externo alinhado com a versão do PostgreSQL que o Discourse atualmente espera/suporta.
OK, entendido. Neste caso, não tive escolha, pois precisávamos de 18 para outro projeto que usa o mesmo cluster de banco de dados. Hmm, parece que precisaríamos de um servidor de banco de dados separado com 15 exclusivamente para o Discourse.
Seria possível fazer a atualização do cliente no local?
Considerando que você parece ter comprovado a compatibilidade com o PG 18, já que o está usando como banco de dados de produção, isso parece ter baixo risco.
Fiz um teste rápido antes com um PostgreSQL 18 externo e uma instalação de Discourse de teste, e não apresentou problemas. Mas, para ser honesto, isso foi apenas algo “rápido e sujo”, não um teste “profundo”. De qualquer forma, está rodando há 2 semanas, então assumo que está tudo bem. O único problema até agora é o backup interno do Discourse. Por outro lado, o próprio servidor de banco de dados (rodando em LXC) também é backupado separadamente.
A política no passado era atualizar a cada duas versões. No entanto, já se passaram 1,5 anos desde o lançamento do PostgreSQL 17 e a imagem oficial do Docker ainda usa a versão 15, então não tenho certeza se isso ainda é válido.
Você pode adicionar código ao seu app.yml para atualizar o PostgreSQL para a versão correspondente. Já fiz isso antes, mas não consigo encontrar minhas anotações. A coisa mais fácil a fazer é entrar no contêiner, executar os comandos apt para instalar os clientes do PostgreSQL corretos e, em seguida, tentar o backup. Assim que isso funcionar, você adiciona esses comandos aos comandos exec no seu app.yml, para que funcione após a próxima reconstrução.
Se precisar que alguém o guie pelo processo, pode me enviar um e-mail ou postar no Marketplace.
Ótimo! Eu provavelmente tentaria instalar especificamente os componentes do cliente do pg18 para que ele não mude para a versão 19 em algum momento. Além disso, você vai querer adicionar esses comandos ao seu app.yml, a menos que prefira fazer isso manualmente a cada atualização.