С PostgreSQL можете да издадете следния оператор, за да върнете pid-овете на задния край на всички отворени връзки, различни от тази:
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
След това можете да подадете заявка за прекратяване към всеки от тези бекенди с
SELECT pg_terminate_backend($1);
Свързване на pids, върнати от първия израз към всяко pg_terminate_backend exec.
Ако другите връзки не използват същия потребител като вас, ще трябва да се свържете като суперпотребител, за да издадете успешно прекъсванията.
- Документи за функциите за сигнализиране на администратора
- Функции за наблюдение на статистика
- pg_stat_activity вижте документи
АКТУАЛИЗАЦИЯ:Включване на коментари и изразяване като задача на Capistrano:
desc "Force disconnect of open backends and drop database"
task :force_close_and_drop_db do
dbname = 'your_database_name'
run "psql -U postgres",
:data => <<-"PSQL"
REVOKE CONNECT ON DATABASE #{dbname} FROM public;
ALTER DATABASE #{dbname} CONNECTION LIMIT 0;
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
AND datname='#{dbname}';
DROP DATABASE #{dbname};
PSQL
end