postgresql-no se puede crear la base de datos-OperationalError: otros usuarios acceden a la base de datos de origen "template1"
postgresql-8.4 (7)
Database template1
existe solo para proporcionar una estructura de barebone para crear otra base de datos vacía. Nunca debe iniciar sesión en template1
, de lo contrario tendrá problemas.
Probablemente la solución más fácil para usted es reiniciar el proceso del servidor PostgreSQL y volver a iniciar sesión. La base de datos que siempre debe existir y es segura para iniciar sesión es postgres
.
Si reiniciar no es una opción, puede usar otra base de datos de plantillas de emergencia: template0
.
Por defecto, esta declaración:
CREATE DATABASE dbname;
es equivalente a:
CREATE DATABASE dbname TEMPLATE template1;
Si template1
no está disponible o está dañado, puede usar template0
como último recurso:
CREATE DATABASE dbname TEMPLATE template0;
Puede leer más sobre bases de datos de plantillas template1 .
Inicié sesión en la base de datos de origen template1 y ahora no puedo crear la base de datos. Cuando intento crear una base de datos, recibo este error:
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
Cada vez que inicio sesión en template1, uso el comando ''salir'' para cerrar sesión, pero como puede ver, no cierra sesión y el número de sesiones aumenta cada vez que inicio sesión. ¿Hay alguna forma de forzar la desconexión de todas las conexiones a template1 que iniciaron sesión ahora?
Este problema ocurre cuando ha iniciado sesión ( psql template1 o psql template0 ) en la base de datos template1 y template0 y sale usando el comando a continuación.
Ctrl + z
Existe una mejor forma de usar db debajo del comando postgres que el problema no se creará:
/ q + enter
Hay 2 soluciones, si tiene problema.
Solución - 1
Reinicie el servicio de posgres como.
sudo service postgresql restart
Solución - 2
sudo ps aux | grep template1
Asegúrate de no borrar estos procesos
postgres 8363 0.0 0.0 111760 7832 pts / 11 T 09:49 0:00 /usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 0.0 14224 976 pts / 14 S + 12:33 0:00 grep --color = auto template1
El resto del proceso se debe matar utilizando el comando siguiente.
sudo kill -9
Ahora intenta crear db de nuevo.
Espero que esto te ayude.
Ankit H Gandhi.
Esto me ayudó a resolver mi problema:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename=''username'';
--Use pid if PostgreSQL version 9.2 or above.
Terminé todas las conexiones activas a template1 y podía crear la base de datos normalmente
Para resolver esto, tengo que desconectar la conexión de base de datos del pgAdmin III.
Puede intentar reiniciar el servicio postgresql que se ejecuta en segundo plano.
También puede intentar terminar el proceso actual por el Terminal
Buscar el proceso:
sudo ps aux | grep template1
Matar el proceso:
sudo kill -9 <tu id de proceso>
Tengo una secuencia de comandos que se conecta a una base de datos y realiza varias operaciones en ella, algunas requieren que nadie más haya iniciado sesión. Modifiqué la respuesta de @Driusius para no terminar la conexión de mi secuencia de comandos, sino para terminar la de todos los demás:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
De los docs : pg_backend_pid()
es el ID de proceso del proceso del servidor adjunto a la sesión actual.