Med PostgreSQL kan du udstede følgende erklæring for at returnere backend-pids for alle åbne forbindelser bortset fra denne:
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
Derefter kan du udstede en anmodning om opsigelse til hver af disse backends med
SELECT pg_terminate_backend($1);
Binding af pids returneret fra den første sætning til hver pg_terminate_backend exec.
Hvis de andre forbindelser ikke bruger den samme bruger som dig, bliver du nødt til at oprette forbindelse som en superbruger for at kunne udstede terminates.
- Dokumenter til administratorsignaleringsfunktioner
- Overvågningsstatistikfunktioner
- pg_stat_activity se dokumenter
OPDATERING:Inkorporerer kommentarer og udtrykker som Capistrano-opgave:
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