Si tengo una consulta de Postgres de larga duración, y "kill [pid]" no funciona, y pg_cancel_backend no funciona, ¿qué debo hacer?
Si tengo una consulta de Postgres de larga duración, y "kill [pid]" no funciona, y pg_cancel_backend no funciona, ¿qué debo hacer?
Usted debe nunca se kill -9 cualquier postgres procesan a menos que su objetivo es llevar a todo el servidor hacia abajo por la fuerza. Puede eliminar cualquier proceso que no responda a una llamada pg_cancel_backend () desde el shell con
kill <pid>
es decir, no -9. Tenga en cuenta que he visto algunas veces que incluso eso no funcionó debido a que el proceso se colgó esperando en algún bucle los datos en una conexión de red. Si recuerdo correctamente, matar el proceso del cliente se encargó de eso.
http://www.postgresql.org/docs/current/static/server-shutdown.html
pg_cancel_backend es equivalente a enviar SIGINT al proceso.
pg_terminate_backend del mismo modo para SIGTERM, pero si pg_cancel_backend no funciona, no veo por qué pg_terminate_backend lo haría.
Si ha probado esas opciones, puede probar SIGQUIT. Los documentos dicen: " Esto se recomienda solo en emergencias " .
(Si odias tus datos y esperas que mueran, podrías usar SIGKILL. Pero no lo haría).
Puedes usarlo kill
directamente o pg_ctl kill
.
si tienes un Postgres reciente, puedes probarlo
pg_terminate_backend
.fuente
Bribles es correcto en su declaración anterior ...
Sin
SHUTDOWN
embargo, si intentas con el servidor, para mí:Solo estoy tratando de eliminar las bases de datos / esquemas retirados, que todavía tienen una conexión persistente que no dejará pasar.
Entonces, para responder tu pregunta,
NO ESTÁ RELACIONADO con apagar el servidor de ninguna manera.
También he visto este comportamiento de
pg_cancel_backend()
no funcionar. Y quería compartir mi solución de trabajo.No he visto un problema hasta ahora, con ningún tipo de "pérdida" de datos.
De nuevo, tampoco estoy tratando de matar
Active
consultas.Espero que esto ayude. =)
~ Jay
fuente