Với PostgreSQL, bạn có thể đưa ra câu lệnh sau để trả về các pids phụ trợ của tất cả các kết nối mở khác với câu lệnh này:
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
Sau đó, bạn có thể đưa ra yêu cầu chấm dứt đối với từng phụ trợ đó với
SELECT pg_terminate_backend($1);
Ràng buộc các pids được trả về từ câu lệnh đầu tiên với mỗi pg_termina_backend thi hành.
Nếu các kết nối khác không sử dụng cùng một người dùng với bạn, bạn sẽ phải kết nối với tư cách là người dùng cấp cao để phát hành thành công các kết thúc.
- Tài liệu về chức năng báo hiệu quản trị viên
- Chức năng thống kê giám sát
- pg_stat_activity xem tài liệu
CẬP NHẬT:Kết hợp các nhận xét và thể hiện dưới dạng nhiệm vụ 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