Met PostgreSQL kunt u de volgende instructie geven om de backend-pids van alle andere open verbindingen dan deze te retourneren:
SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid();
Vervolgens kunt u een beëindigingsverzoek indienen bij elk van die backends met
SELECT pg_terminate_backend($1);
Binden van de pids die zijn geretourneerd van de eerste instructie aan elke pg_terminate_backend exec.
Als de andere verbindingen niet dezelfde gebruiker als u gebruiken, moet u verbinding maken als supergebruiker om de beëindigingen met succes uit te geven.
- Documenten voor beheerderssignaleringsfuncties
- Statistieken bijhouden
- pg_stat_activity bekijk documenten
UPDATE:opmerkingen opnemen en uitdrukken als Capistrano-taak:
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