tutorial pricing postgres delete create postgresql heroku

pricing - heroku postgresql database url



Heroku Postgres: terminación de la consulta bloqueada(inactiva en la transacción) (3)

Prueba esto:

select pg_terminate_backend(pid int)

Más sobre esto puedes encontrar here . Esta debería ser una solución ''más limpia'' de este problema que matar proceso por sistema.

Estoy usando Heroku con la opción Crane Postgres y estaba ejecutando una consulta en la base de datos desde mi máquina local cuando se colgó mi máquina local. Si corro

select * from pg_stat_activity

una de las entradas tiene

<IDLE> in transaction

en la columna current_query_text

Como resultado, no puedo eliminar la tabla que estaba siendo escrita por la consulta que finalizó. He intentado usar pg_cancel_backend (N) y devuelve True, pero parece que no pasa nada.

¿Cómo puedo finalizar este proceso para poder abandonar la mesa?


Puede instalar el heroku-pg-extras y ejecutar el siguiente comando para obtener el PID:

heroku pg:locks --app <your-app>

Entonces solo hazlo:

heroku pg:kill <pid> --app <your-app>

NOTA : la opción de --force se puede usar para emitir pg_terminate_backend, que elimina toda la conexión para esa consulta.

Si heroku pg:locks no muestra nada, prueba heroku pg:ps .

Para obtener más información, consulte:
https://devcenter.heroku.com/articles/heroku-postgresql#pg-ps-pg-kill-pg-killall


Esta es una respuesta general de Postgres, y no específica para heroku

Encuentre el PID ejecutando este sql:

SELECT pid , query, * from pg_stat_activity WHERE state != ''idle'' ORDER BY xact_start;

(Las versiones antiguas de Postgres usan procpid en lugar de pid). Encontrará el pid en la primera columna (izquierda) y la primera (superior) probablemente sea la consulta que desea finalizar. Asumiré que el pid es 1234 a continuación.

Puede cancelar una consulta a través de SQL (es decir, sin acceso al shell) siempre que sea suyo o tenga acceso de superusuario:

select pg_cancel_backend(1234);

Esta es la forma "suave" ... la consulta no desaparecerá de inmediato. Si tienes prisa, prueba este en su lugar:

select pg_terminate_backend(1234);

Si tiene acceso de shell y permisos de raíz o postgres, también puede hacerlo desde el shell:

kill -INT 1234

Si eso no ayuda, use:

kill 1234

NO HAGA:

kill -9 1234

... que a menudo provocará que todo el servidor de postgres se incendie, entonces también puede reiniciar postgres. Postgres es bastante robusto, por lo que los datos no se corromperán, pero recomendaría no usar "kill -9" en ningún caso ;-)

Una "transacción inactiva" de larga duración a menudo significa que la transacción no finalizó con un "compromiso" o una "reversión", lo que significa que la aplicación tiene errores o no está diseñada adecuadamente para funcionar con bases de datos transaccionales. Debe evitarse la "operación inactiva" duradera, ya que también puede causar problemas importantes de rendimiento.