Chcę usunąć wszystkie połączenia (sesje), które są obecnie otwarte dla określonej bazy danych PostgreSQL, ale bez ponownego uruchamiania serwera lub rozłączania połączeń z innymi bazami danych.
Jak mogę to zrobić?
postgresql
connections
session
sorin
źródło
źródło
Odpowiedzi:
Oto moja odpowiedź na bardzo podobne pytanie na StackOverflow.
W zależności od wersji postgresql możesz napotkać błąd, który powoduje
pg_stat_activity
pominięcie aktywnych połączeń od upuszczonych użytkowników. Te połączenia również nie są pokazane w pgAdminIII.Jeśli wykonujesz testy automatyczne (w których również tworzysz użytkowników), może to być prawdopodobny scenariusz.
W takim przypadku musisz wrócić do zapytań takich jak:
źródło
Takie zapytanie powinno pomóc (zakładając, że baza danych nosi nazwę „db”):
pid
był wywoływanyprocpid
, więc jeśli używasz wersji postgres starszej niż 9.2, możesz spróbować:Jednak musisz być superużytkownikiem, aby rozłączyć innych użytkowników.
Może być również przydatny
REVOKE CONNECT ON DATABASE FROM PUBLIC
lub podobny, a potemGRANT
później.źródło
Można tego użyć do „zwolnienia” bazy danych z połączeń klienckich, aby na przykład można zmienić jej nazwę:
Pamiętaj, że może to powodować problematyczne zachowanie aplikacji klienckich. W rzeczywistości dane nie powinny być zakłócane z powodu korzystania z transakcji.
źródło