Dadurch werden alle bestehenden Verbindungen außer der Ihren gelöscht:
Abfrage pg_stat_activity
und erhalten Sie die Pid-Werte, die Sie töten wollen, dann geben Sie SELECT pg_terminate_backend(pid int)
zu ihnen.
PostgreSQL 9.2 und höher:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- change this to your DB
AND pid <> pg_backend_pid();
PostgreSQL 9.1 und niedriger:
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- change this to your DB
AND procpid <> pg_backend_pid();
Sobald Sie alle Verbindungen getrennt haben, müssen Sie die Verbindung trennen und den Befehl DROP DATABASE von einer Verbindung zu einer anderen Datenbank aus eingeben, die nicht diejenige ist, die Sie löschen wollen.
Beachten Sie die Umbenennung der procpid
Spalte zu pid
. Siehe dieses Thema der Mailingliste .
1 Stimmen
Mit welcher Version von PostgreSQL arbeiten Sie?
2 Stimmen
Problem: Sie können zwar die mit der Datenbank verbundenen Sitzungen beenden, aber sie können sich so schnell wieder verbinden, dass Sie die Datenbank trotzdem nicht löschen können. Glücklicherweise zeigt dieser Beitrag, wie man neue Verbindungen sperrt, so dass man die aktuellen Verbindungen beenden und die Datenbank wie geplant löschen kann: dba.stackexchange.com/questions/11893/
1 Stimmen
Ich fand diese Antwort auf dba.stackexchange sehr hilfreich dba.stackexchange.com/a/11895/163539 -- kurz und bündig, aber ausreichend erklärend.