Ximena, miembro de este gran staff, nos hizo el favor de redactar este tutorial ya que domina perfectamente este tema.
Solución:
Tal vez echar un vistazo a lo que heroku pg:kill
puede hacer por ti? https://devcenter.heroku.com/articles/heroku-postgresql#pg-ps-pg-kill-pg-killall
heroku pg:killall
matará todas las conexiones abiertas, pero eso puede ser un instrumento contundente para sus necesidades. Curiosamente, en realidad puedes matar conexiones específicas utilizando los clips de datos de heroku.
Para obtener una lista detallada de conexiones, puede consultar a través de clips de datos:
SELECT * FROM pg_stat_activity;
En algunos casos, es posible que desee eliminar todas las conexiones asociadas con una dirección IP (su computadora portátil o, en mi caso, un servidor que ahora fue destruido).
Puede ver cuántas conexiones pertenecen a cada IP de cliente usando:
SELECT client_addr, count(*)
FROM pg_stat_activity
WHERE client_addr is not null
AND client_addr <> (select client_addr from pg_stat_activity where pid=pg_backend_Tid())
GROUP BY client_addr;
que enumerará la cantidad de conexiones por IP, excluyendo la IP que usa dataclips.
Para eliminar realmente las conexiones, pasa su “pid” a pg_terminate_backend(). En el caso sencillo:
SELECT pg_terminate_backend(1234)
donde 1234 es el PID infractor que encontró en pg_stat_activity.
En mi caso, quería eliminar todas las conexiones asociadas con un servidor (ahora muerto), así que usé:
SELECT pg_terminate_backend(pid), host(client_addr)
FROM pg_stat_activity
WHERE host(client_addr) = 'IP HERE'
De la documentación de Heroku (el énfasis es mío):
FATAL: demasiadas conexiones para el rol
FATAL: demasiadas conexiones para el rol”[role name]Esto ocurre en los planes de nivel de inicio (de desarrollo y básico), que tienen un límite máximo de conexión de 20 por usuario. Para resolver este error, cierre algunas conexiones a su base de datos deteniendo trabajadores en segundo plano, reduciendo la cantidad de dynos o reiniciando su aplicación en caso de que haya creado fugas de conexión con el tiempo. Puede encontrar una discusión sobre el manejo de conexiones en una aplicación Rails aquí.
Debido a que Heroku no proporciona acceso de superusuario, sus opciones se limitan a las anteriores.