Anúncio de serviço público: nunca exclua postmaster.pid
. Mesmo. Ótima maneira de obter corrupção de dados.
Você já tinha o PostgreSQL instalado e excluiu o diretório de dados sem interromper o servidor em execução. Portanto, agora você tem alguns processos órfãos do servidor PostgreSQL que estão gerenciando arquivos de dados que foram excluídos, para que eles não sejam mais acessíveis no sistema de arquivos e serão totalmente excluídos quando a última manipulação de arquivos abertos para eles estiver fechada. Você não pode usar pg_ctl
para desligar o servidor como de costume porque você excluiu o datadir do cluster, então você deve simplesmente eliminar os processos. Matar o postmaster (fazer não usar kill -9
, apenas uma morte comum serve) e o resto também será desligado.
Você poderá, então, iniciar um novo servidor no datadir com base nos dados recentes do initdb
'.
É altamente provável que você experimente conflitos na pista, a menos que você desinstale a outra versão mais antiga do PostgreSQL.
Resumindo:
cat /usr/local/var/postgres/postmaster.pid
Anote o número na primeira linha, que é o pid do postmaster.
Verifique com ps
que o pid é o de um postmaster postgres.
Mate o processo postmaster com o seguinte comando, substituindo 'PID' pelo número anotado. Novamente, não use kill -9
ou kill -KILL
, use apenas kill
, ou seja, SIGTERM
:
kill PID
Se o pid não for o de um postmaster postgres, manualmente kill
any postgres
backends que ainda podem estar em execução, verificarão se eles não estão mais em execução e somente então remova postmaster.pid
. (Você também deve verificar se o postmaster.pid
não está no armazenamento compartilhado onde o servidor pode estar sendo executado em alguma outra VM / host).