Conocer los usuarios conectados a una base de datos
en PostgreSQL
Hola a todos, en algunas ocasiones te ha pasado que tratas de
eliminar una base de datos en PostgreSQL pero sale un mensaje que dice que
existen usuarios conectados? pues esto te puede servir, para conocer los
usuarios conectados a la base de datos ejecutas la siguiente sentencia:
SELECT * FROM pg_stat_activity;
Con esto verías los usuarios con su respectiva IP y proceso
conectados a las bases de datos, para cuando veas que usuarios necesitas
cerrarle la conexión solo necesitas verificar el PID que se muestra en la
consulta y ejecutar la siguiente sentencia:
SELECT
pg_cancel_backend(<pid>);
Coloca el número del PID reemplazando "<pid>" y
con eso ya podrías eliminar la base de datos. Espero que les haya servido y
hasta una próxima oportunidad.
Matar sesiones conectadas a una base de datos (PostgreSQL)
Para poder matar las conexiones que existan para una determinada
base de datos en PostgreSQL, deberemos combinar la función
pg_terminate_backend(pid) para matar la sesión con la tabla pg_stat_activity
para obtener los pids de las conexiones a una determinada base de datos
Mediante la tabla pg_stat_activity podemos filtrar por “datname”
para obtener todos los pids (columna pid) de las conexiones a dicha base de
datos, por lo que si lo combinamos con la función pg_terminate_backend()
podremos matar todas las sesiones que usen dicha base de datos. La query sería:
SELECT
pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'basededatos';
PostgreSQL: Desconectar usuarios de una base de datos
En
el post de hace un par de días, PostgreSQL: Renombrar una base de datos,
comentábamos que para poder renombrar una base de datos es necesario que no
existan usuarios conectados a la misma.
2.
Nos aseguramos de que no existen usuarios conectados a la base de datos. Para
ello ejecutamos el siguiente comando (debería mostrar 0 usuarios conectados):
SELECT
COUNT(*) AS users_online FROM pg_stat_activity WHERE datname='olddbname';
Pero,
¿qué ocurre si existen conexiones a la base de datos? ¿Cómo desconecto a los
usuarios?
La
respuesta es:
SELECT
pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='dbname' AND
procpid<>pg_backend_pid();
La
condición AND procpid<>pg_backend_pid() evita que nos desconectemos a
nosotros mismos si también estamos conectados a la base de datos.
Para
finalizar, si lo que quieres es desconectar a todos los usuarios, de todas las
bases de datos, puedes ejecutar el comando anterior tantas veces como bases de
datos tengas. Sin embargo, como esto puede resultar engorroso si el número de
bases de datos es elevado, también puedes programar un pequeño script que
automatice el proceso, pero… para qué reinventar la rueda, en el siguiente
enlace PostgreSQL Disconnect All Users puedes encontrar un script que te
ahorrará tiempo y trabajo.
Tu
opinión es importante, por favor, si has llegado hasta aquí, dedica 2 segundos
a darme tu opión sobre el blog. Gracias.
Estimado,
ResponderEliminardespués que desconecto un usuario de esta forma no puedo volver a conectarlo.
Qué se puede hacer?
Gracias.
Muchas gracias crack.
ResponderEliminar