1 2 3 4 |
postgres=# DROP DATABASE target_db; ERROR: database "target_db" is being accessed by other users DETAIL: There is 1 other session using the database. postgres=# |
для начала киляем конекты:
Thank you for reading this post, don't forget to subscribe!PostgreSQL 9.2 и выше:
1 2 3 4 |
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'target_db' AND pid <> pg_backend_pid(); |
PostgreSQL 9.1 и ниже:
1 2 3 4 |
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'target_db' AND procpid <> pg_backend_pid(); |
далее можно удалять
DROP DATABASE target_db
==================================================================================================
ну или так:
При удалении базы появляется ошибка о активных пользователях
drop database "SMS_Broadcaster";
ERROR: database "SMS_Broadcaster" is being accessed by other users
DETAIL: There are 8 other sessions using the database.
Для начала запретим новые соединения с базой командой где "SMS_Broadcaster" – имя базы, postgres – владелец базы
REVOKE CONNECT ON DATABASE "SMS_Broadcaster" FROM PUBLIC, postgres;
Далее разрываем все активные соединения
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
pid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = ' SMS_Broadcaster ' ;
После применения данной команды, будет показано сколько пользователей было отключено
Теперь можно дропать базу
drop database "SMS_Broadcaster";
Для восстановления доступа к базе, если снова будет создана база данных, выполним следующую команду
GRANT CONNECT ON DATABASE "SMS_Broadcaster" TO postgres;