Med PostgreSQL kan du utfärda följande uttalande för att returnera backend-pids för alla öppna anslutningar förutom den här:
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
Sedan kan du skicka en begäran om uppsägning till var och en av dessa backends med
SELECT pg_terminate_backend($1);
Bindning av pids som returneras från den första satsen till varje pg_terminate_backend exec.
Om de andra anslutningarna inte använder samma användare som du måste du ansluta som en superanvändare för att framgångsrikt kunna utfärda avslutningarna.
- Dokument för administratörssignalfunktioner
- Övervakningsstatistikfunktioner
- pg_stat_activity visa docs
UPPDATERING:Inkluderar kommentarer och uttrycker som Capistrano-uppgift:
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