ONE DUDE`S BLOG

There is 1 other session using the database.

31.01.2020
Иногда при дропе базы, в postgres есть запущенные сессии, конечно, можно остановить приложения, которые стучатся в базу, однако, не всегда..

Проблема

Иногда при дропе базы, в postgres есть запущенные сессии, конечно, можно остановить приложения, которые стучатся в базу, однако, не всегда есть возможность или нам просто лень делать это, и мы получаем ошибку вида There is 1 other session using the database.

postgres=# DROP DATABASE target_db;
ERROR:  database "target_db" is being accessed by other users
DETAIL:  There is 1 other session using the database.

Решение

Для Postgresql версии 9.2 и выше можно использовать следующий sql запрос:

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 и ниже запрос немного изменится:

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'target_db'
AND procpid <> pg_backend_pid();

После чего успешно дропаем нашу базу данных

P.s. абсолютно честно и легитимно взято отсюда.

Posgres
Базы данных
5
583