Para un gran número de acciones sobre una base de datos necesitamos que esta no tenga ninguna conexión activa contra ella. Por ejemplo, si queremos lanzar un "drop database" para eliminar una base de datos que está en uso y por tanto tienen conexiones abiertas, nos dará el siguiente mensaje de error:
[Error] Líneas de script: 1-1 ----------------------
ERROR: database "ke4" is being accessed by other users
Detail: There are 3 other session(s) using the database.
Línea: 1
Para eliminarlas y poder realizar el borrado necesitaremos sacar el listado de conexiones que tenemos. Para ello utilizamos la tabla pg_stat_activity filtrando por el datname con el nombre de nuestra base de datos:
SELECT * FROM pg_stat_activity WHERE datname = 'ke4';
En mi caso el resultado sería este:
datid datname procpid usesysid usename application_name client_addr client_port backend_start xact_start query_start waiting current_query
530
ke4 2549 188 k 20.0.0.2 55311 20/05/2015 20/05/2015 20/05/2015 false <IDLE> in transaction
Para matar esta sesión sin reiniciar el servidor utilizamos la función pg_terminate_backend con el id del campo procpid:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'ke4';
En mi caso sería así:
SELECT pg_terminate_backend(2549) FROM pg_stat_activity WHERE datname = 'ke4';
No hay comentarios:
Publicar un comentario