Atualização do PostgreSQL 15

Durante a atualização, recebi

Parando o servidor de banco de dados PostgreSQL 15: mainErro: O proprietário da configuração (postgres:101) e o proprietário dos dados (runit-log:999) não correspondem, e o proprietário da configuração não é root … falhou!
falhou!
não foi possível abrir o arquivo de versão " /shared/postgres_data/PG_VERSION ": Permissão negada
Falha, saindo

O que foi resolvido por

sudo ./launcher enter app

e então

chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /shared/postgres_run
chmod -R 700 /shared/postgres_data

3 curtidas

Estou em um loop infinito, o banco de dados foi atualizado corretamente, mas quando executo ./launcher rebuild app ele fica em loop, a única coisa que consigo ver é o seguinte

EDIT: Encontrei esta mensagem…

mv: falha ao mover entre dispositivos: '/shared/postgres_data_new' para '/shared/postgres_data/postgres_data_new'; impossível remover o destino: Diretório não vazio

Sua instalação contém extensões que devem ser atualizadas
com o comando ALTER EXTENSION. O arquivo
    update_extensions.sql
quando executado por psql pelo superusuário do banco de dados atualizará
essas extensões.

Por favor, me aconselhe

Upgrade Concluído
----------------
As estatísticas do otimizador não são transferidas pelo pg_upgrade.
Depois de iniciar o novo servidor, considere executar:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Executar este script excluirá os arquivos de dados do cluster antigo:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE DO POSTGRES CONCLUÍDO

O banco de dados antigo 13 está armazenado em /shared/postgres_data_old

Para completar o upgrade, reconstrua novamente usando:

./launcher rebuild app
-------------------------------------------------------------------------------------

Ok, então parece que este é o problema aqui:

Estes estão localizados em shared/standalone/ e já foram movidos manualmente…

mv: não é possível mover '/shared/postgres_data' para '/shared/postgres_data_old': Dispositivo ou recurso ocupado
mv: falha ao mover entre dispositivos: '/shared/postgres_data_new' para '/shared/postgres_data/postgres_data_new'; impossível remover o destino: Diretório não vazio
I, [2025-02-08T15:22:42.078189 #1]  INFO -- : Gerando locais (isso pode levar um tempo)...
1 curtida

Nenhuma solução parece funcionar. É tão frustrante.

1 curtida

Isso seria muito incomum para alguém oferecer tal serviço sem antes ser solicitado.
Se você deseja contratar alguém, este é o lugar para ir: Marketplace - Discourse Meta

4 curtidas

Nossa instância multissite está inativa após a atualização. Ela disse:

Sua instalação contém extensões que devem ser atualizadas
com o comando ALTER EXTENSION. O arquivo
update_extensions.sql
quando executado pelo psql pelo superusuário do banco de dados atualizará
essas extensões.

Não consigo encontrar o arquivo update_extensions.sql em lugar nenhum. Onde ele estaria localizado?

2 curtidas

Verifique isto

mv: não é possível mover '/shared/postgres_data' para '/shared/postgres_data_old': Dispositivo ou recurso ocupado
mv: falha ao mover entre dispositivos: '/shared/postgres_data_new' para '/shared/postgres_data/postgres_data_new'; impossível remover destino: Diretório não está vazio
I, [2025-02-08T15:22:42.078189 #1]  INFO -- : Gerando locais (isso pode levar um tempo)...

Fui eu. Ofereço ajuda quando parece que alguém está em uma situação que será difícil de resolver com a ajuda aqui.

4 curtidas

Pergunta de curiosidade.

Existe alguma estratégia ou padrão relacionado a atualizações de componentes chave, como o Postgres?

Vejo que o suporte ao Postgres 13 foi até 25/11 e que o 15 vai até 2027, e a versão atual é a 17.

Realmente, estou apenas querendo aprender e entender. Mudar versões de banco de dados geralmente é um grande problema e um trabalho pesado.

Obrigado!

1 curtida

Eu estou na estaca desde o Postgres 10. Geralmente eles atualizam a cada duas versões, embora tenham pulado do 12 para o 13 porque havia algumas melhorias que tornaram uma troca antecipada válida. Fiquei um pouco surpreso de eles não terem ido direto para o 16.

Normalmente, as atualizações são bem tranquilas, desde que você tenha espaço suficiente no disco e uma versão recente do Docker.

3 curtidas

Voltei para o modelo 13 até que haja uma correção, obrigado

Consegui resolver o problema que tive com a atualização do PostgreSQL de 13 para 15, após restaurar o servidor com a atualização falha a partir de backups, os seguintes passos funcionaram para mim com uma locale PostgreSQL en_GB.UTF-8:

sudo -i
su - discourse
cd /var/discourse
git stash
git stash drop
git pull
./launcher stop app
docker run --rm \
    --entrypoint=/bin/bash \
    -e LANG='en_GB.UTF-8' \
    -v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/13/data \
    -v /var/discourse/shared/standalone/postgres_data_new:/var/lib/postgresql/15/data \
    tianon/postgres-upgrade:13-to-15 \
    -c 'sed -i "s/^# $LANG/$LANG/" /etc/locale.gen && locale-gen &&
    apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
    docker-upgrade'
exit
mv /var/discourse/shared/standalone/postgres_data /var/discourse/shared/standalone/postgres_data_old
mv /var/discourse/shared/standalone/postgres_data_new /var/discourse/shared/standalone/postgres_data
chown -R 101:104 /var/discourse/shared/standalone/postgres_data
su - discourse
cd /var/discourse
docker run --rm -v /var/discourse/shared/standalone:/shared \
local_discourse/app chown -R postgres:postgres /shared/postgres_data
./launcher rebuild app

Precisei remover as alterações locais que haviam sido feitas no passado para o LANG do PostgreSQL usando git stash; git stash drop e a movimentação dos diretórios de dados do PostgreSQL precisou ser feita como root e um chown foi necessário.

5 curtidas

O git pull é necessário desta vez? Geralmente não é.

1 curtida

Não é mais necessário atualmente, pois o rebuild faz isso.

3 curtidas

A mensagem final Device or resource busy do primeiro erro implica que algo mais está segurando um bloqueio desse diretório postgres_data, de modo que ele não pode ser movido.

Como esse é o diretório do banco de dados, uma explicação provável é que postgres_data pode ser um ponto de montagem. Isso é ainda mais provável, pois vemos inter-device move failed no segundo comando mv, implicando que shared/postgres_data_new e shared/postgres_data estão em discos/partições diferentes.

Se você confirmar que postgres_data é um ponto de montagem, terá que mover manualmente todos os arquivos de postgres_data para algum outro diretório de backup e, em seguida, mover todos os arquivos de dentro de postgres_data_new para o diretório postgres_data (agora vazio). Ambos os movimentos devem ser feitos após a conclusão da primeira reconstrução com UPGRADE OF POSTGRES COMPLETE, mas antes de emitir a segunda.

Se postgres_data não for um ponto de montagem, lsof é seu amigo. Você pode usá-lo para tentar identificar o que está causando o bloqueio.

Claro, faça os backups necessários primeiro.

3 curtidas

Isto é perfeito, obrigado.

Os arquivos estavam na seguinte pasta:

/var/postgres_data_discourse como postgres_data_new

O seguinte corrigiu isso.

Movi o postgres_data_new para /var
Renomeei o postgres_data_discourse para postgres_data_discourse_old
Renomeei o postgres_data_new para postgres_data_discourse
Executei ./launcher rebuild app

Obrigado novamente :+1:

5 curtidas

Tenho 62g de banco de dados, o que você sugere para realizar o melhor upgrade?

62G /var/discourse/shared/standalone/postgres_data

1 curtida

Recomendo que você migre para uma nova VM, configure um novo Discourse com um banco de dados vazio (copiando os diretórios ssl e letsencrypt se desejar uma troca com tempo de inatividade zero) e restaure o banco de dados atual para o novo servidor. Isso permite que você faça a atualização com tempo de inatividade zero e risco zero de que algo possa dar errado.

Provavelmente não é cedo demais para atualizar seu sistema operacional de qualquer maneira.

2 curtidas

Essa é uma boa ideia.
Posso mover o backup ### 3.4.0.beta4-dev ### para a instalação mais recente?

1 curtida

Se você está perguntando se pode restaurar qualquer versão antiga do Discourse para qualquer nova versão do Discourse que possa obter, a resposta é sim.

4 curtidas