Verbindungen trennen zu einer Postgres-Datenbank

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Wie löscht man eine Datenbank, die gerade in Verwendung ist? Klar, alle Verbindungen treffen und das Drop-Statement ausführen – gar nicht mal so einfach mit PostgreSQL und pgAdmin.

Während man beispielsweise im Enterprise Manager für MSSQL bequem die aktiven Verbindungen trennen kann, bietet das Boardmittel von Postgres, pgAdmin, keine solche Möglichkeit. SQL hilft da weiter. Zuerst einmal wählen wir eine Datenbank – nicht diejenige, zu der wir die Verbindungen trennen möchten und die schliesslich auch gelöscht werden soll. Anschliessend benutzen wir für PostgreSQL ab Version 9.2 folgendes SQL-Statement:

1SELECT pg_terminate_backend(pg_stat_activity.pid)
2FROM pg_stat_activity
3WHERE pg_stat_activity.datname = 'meinedatenbank';

Für Postgres 9.1 und älter liefert der View pg_stat_activity leicht andere Resultate. Folglich lautet der Befehl ein wenig anders:

1SELECT pg_terminate_backend(pg_stat_activity.procpid)
2FROM pg_stat_activity
3WHERE pg_stat_activity.datname = 'meinedatenbank';