Se eu tiver uma consulta de longa duração no Postgres e "kill [pid]" regular não funcionar, e pg_cancel_backend não funcionar, o que devo fazer?
Se eu tiver uma consulta de longa duração no Postgres e "kill [pid]" regular não funcionar, e pg_cancel_backend não funcionar, o que devo fazer?
Você nunca deve matar -9 qualquer processo do postgres, a menos que seu objetivo seja derrubar o servidor inteiro à força. Você pode matar qualquer processo que não responda a uma chamada pg_cancel_backend () do shell com
kill <pid>
ou seja, não -9. Observe que eu já vi algumas vezes em que nem isso funcionou devido ao processo ser interrompido, aguardando em algum loop pelos dados em uma conexão de rede. Se bem me lembro, matar o processo do cliente cuidava disso.
http://www.postgresql.org/docs/current/static/server-shutdown.html
pg_cancel_backend é equivalente a enviar SIGINT para o processo.
pg_terminate_backend da mesma forma para o SIGTERM, mas se pg_cancel_backend não estiver funcionando, não vejo por que pg_terminate_backend funcionaria.
Se você tentou essas opções, pode tentar SIGQUIT. Os documentos dizem: " Isso é recomendado apenas em emergências " .
(Se você odeia seus dados e espera que eles morram, você pode usar o SIGKILL. Mas eu não.)
Você pode usar kill
diretamente ou pg_ctl kill
.
Se você possui um Postgres recente, pode tentar
pg_terminate_backend
.fonte
subornos está correto em sua declaração acima ...
Se você está tentando
SHUTDOWN
o servidor, para mim, porém:Estou apenas tentando remover bancos de dados / esquemas aposentados, que ainda têm uma conexão persistente que não será liberada.
Então, para responder sua pergunta,
NÃO RELACIONADO a desligar o servidor de qualquer forma.
Eu também vi esse comportamento de
pg_cancel_backend()
não funcionar. E queria compartilhar minha solução de trabalho.Eu não vi um problema até agora, com qualquer tipo de "perda" de dados.
Novamente, também não estou tentando matar
Active
consultas.Espero que isto ajude. =)
~ Jay
fonte