Ich möchte alle Verbindungen (Sitzungen) löschen, die derzeit zu einer bestimmten PostgreSQL-Datenbank geöffnet sind, ohne jedoch den Server neu zu starten oder die Verbindungen zu anderen Datenbanken zu trennen.
Wie kann ich das machen?
postgresql
connections
session
Sorin
quelle
quelle
Antworten:
Hier ist meine Antwort auf eine sehr ähnliche Frage zu StackOverflow.
Abhängig von Ihrer Version von postgresql kann es vorkommen, dass Sie auf einen Fehler stoßen, der dazu führt, dass
pg_stat_activity
aktive Verbindungen von abgelehnten Benutzern weggelassen werden. Diese Verbindungen werden auch in pgAdminIII nicht angezeigt.Wenn Sie automatische Tests durchführen (bei denen Sie auch Benutzer erstellen), ist dies möglicherweise ein wahrscheinliches Szenario.
In diesem Fall müssen Sie auf folgende Abfragen zurückgreifen:
quelle
Die folgende Abfrage sollte helfen (vorausgesetzt, die Datenbank heißt 'db'):
pid
Früher hieß dasprocpid
, wenn Sie also eine Version von postgres verwenden, die älter als 9.2 ist, können Sie Folgendes versuchen:Sie müssen jedoch ein Superuser sein, um andere Benutzer zu trennen.
Es könnte auch nützlich sein,
REVOKE CONNECT ON DATABASE FROM PUBLIC
oder so ähnlich, und dannGRANT
danach.quelle
Dies kann verwendet werden, um eine Datenbank von Client-Verbindungen zu "befreien", so dass Sie sie beispielsweise umbenennen können:
Beachten Sie, dass dies zu einem problematischen Verhalten Ihrer Client-Apps führen kann. Die Daten sollten nicht aufgrund von Transaktionen beschädigt werden.
quelle