database - usuarios - Eliminar la base de datos postgresql a través de la línea de comandos
ver databases postgresql (4)
Estoy tratando de eliminar mi base de datos y crear una nueva a través de la línea de comandos. Inicio de sesión con psql -U nombre de usuario y luego hago una / connect template1, seguida de un databasename DROP DATABASE;
Aparece el error "otros usuarios acceden al nombre de la base de datos de la base de datos". Apagué a Apache e intenté esto y todavía estoy recibiendo este error. ¿Estoy haciendo algo mal?
Cuando dice que los usuarios están conectados, ¿qué hace la consulta "seleccionar * de pg_stat_activity;" ¿decir? ¿Están los otros usuarios además de usted ahora conectados? Si es así, es posible que deba editar su archivo pg_hba.conf para rechazar las conexiones de otros usuarios, o cerrar cualquier aplicación que acceda a la base de datos de pg para poder eliminarla. Tengo este problema en ocasiones en la producción. Establezca pg_hba.conf para que tenga dos líneas como esta:
local all all ident
host all all 127.0.0.1/32 reject
y dígale a pgsql que vuelva a cargar o reiniciar (es decir, ya sea sudo /etc/init.d/postgresql reload o pg_ctl reload) y ahora la única forma de conectarse a su máquina es a través de sockets locales. Estoy asumiendo que estás en Linux. Si no es así, es posible que deba ser ajustado a algo que no sea local / ident en esa primera línea, a algo como host ... su nombre de usuario.
Ahora deberías poder hacer:
psql postgres
drop database mydatabase;
Esto funcionó para mí:
select pg_terminate_backend(pid) from pg_stat_activity where datname=''YourDatabase'';
para postgresql anterior a 9.2 reemplace pid
con procpid
DROP DATABASE "YourDatabase";
Prueba esto. Tenga en cuenta que no hay una base de datos especificada, simplemente se ejecuta "en el servidor"
psql -U postgres -c "drop database databasename"
Si eso no funciona, he visto un problema con los postgres en las declaraciones preparadas huérfanas.
Para limpiarlos, haz esto:
SELECT * FROM pg_prepared_xacts;
Entonces para cada ID que veas, ejecuta esto:
ROLLBACK PREPARED ''<id>'';
Puede ejecutar el comando dropdb desde la línea de comando:
dropdb ''database name''
Tenga en cuenta que debe ser un superusuario o el propietario de la base de datos para poder eliminarlo.
También puede consultar la vista pg_stat_activity para ver qué tipo de actividad se está realizando actualmente en su base de datos, incluidos todos los procesos inactivos.
SELECT * FROM pg_stat_activity WHERE datname=''database name'';