Ilekroć próbuję upuścić bazę danych, otrzymuję:
ERROR: database "pilot" is being accessed by other users
DETAIL: There is 1 other session using the database.
Kiedy używam:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';
Zakończyłem połączenie z tej bazy danych, ale jeśli spróbuję później zrzucić bazę danych, ktoś automatycznie łączy się z tą bazą i podaje ten błąd. Co może to robić? Nikt oprócz mnie nie korzysta z tej bazy danych.
źródło
GRANT CONNECT ON DATABASE thedb TO public;
Ilekroć próbuję upuścić bazę danych, otrzymuję:
Najpierw musisz odwołać
Następnie użyj:
To na pewno zadziała.
źródło
Znalazłem rozwiązanie tego problemu, spróbuj uruchomić to polecenie w terminalu
zabij proces za pomocą tego polecenia
źródło
Po prostu sprawdź, jakie jest połączenie, skąd pochodzi. Możesz to wszystko zobaczyć w:
Może to twój związek?
źródło
Oznacza to, że inny użytkownik uzyskuje dostęp do bazy danych. Po prostu zrestartuj PostgreSQL. To polecenie załatwi sprawę
Następnie spróbuj upuścić bazę danych:
To wystarczy.
źródło
Rozwiązanie pgAdmin 4 przy użyciu interfejsu użytkownika
Najpierw włącz pokazuj aktywność na pulpicie nawigacyjnym, jeśli tego nie zrobiłeś:
Teraz wyłącz wszystkie procesy za pomocą db:
Powinien być teraz w stanie usunąć plik db.
źródło
Jeśli nie ma potencjalnego wpływu na inne usługi na twoim komputerze, po prostu
service postgresql restart
źródło
Rozwiązanie:
1. Zamknij serwer PG 2. Rozłączy wszystkie aktywne połączenia 3. Zrestartuj serwer PG 4. Wypróbuj swoje polecenie
źródło
Proste
źródło
W moim przypadku używam AWS Redshift (na podstawie Postgres). Wygląda na to, że nie ma innych połączeń z bazą danych, ale otrzymuję ten sam błąd.
W moim przypadku wydaje się, że klaster bazy danych nadal przetwarza bazę danych i chociaż nie ma innych połączeń zewnętrznych / użytkowników, baza danych jest nadal używana wewnętrznie. Znalazłem to, uruchamiając następujące polecenie:
Więc mój hack polegał na napisaniu pętli w moim kodzie, szukając wierszy z nazwą mojej bazy danych. (oczywiście pętla nie jest nieskończona i jest senną pętlą itp.)
W przypadku znalezienia wierszy przejdź do usuwania każdego PID, jeden po drugim.
Jeśli nie znaleziono żadnych wierszy, kontynuuj usuwanie bazy danych
Uwaga: W moim przypadku piszę testy jednostkowe / systemowe Javy, gdzie można to uznać za akceptowalne. Jest to niedopuszczalne w przypadku kodu produkcyjnego.
Oto kompletny hack w Javie (zignoruj moje klasy testowe / narzędziowe).
źródło
Moim zdaniem w tle działa kilka bezczynnych zapytań.
Uwaga: zabicie zapytania wybierającego nie ma żadnego złego wpływu
źródło
REVOKE CONNECT
nie uniemożliwi połączeń od właściciela bazy danych lub superużytkownika. Jeśli więc nie chcesz, aby ktokolwiek podłączał bazę danych, przydatne może być wykonanie polecenia.Następnie użyj:
źródło
Chociaż przy innych okazjach okazały się przydatne dwie odpowiedzi, które zostały do góry oddane, dziś najprostszym sposobem rozwiązania problemu było uświadomienie sobie, że PyCharm może utrzymywać sesję otwartą, a jeśli
Stop
kliknę w PyCharm, może to pomóc. Po otwarciu pgAdmin4 w przeglądarce zrobiłem to i prawie natychmiast zauważyłem, że statystyki sesji bazy danych spadły do 0, w którym to momencie mogłem porzucić bazę danych.źródło
W macOS spróbuj zrestartować bazę danych postgresql przez konsolę za pomocą polecenia:
źródło
W terminalu wypróbuj to polecenie:
zobaczysz jak:
Trzecia liczba (3645) to PID.
Możesz to usunąć
Następnie uruchom połączenie z PostgreSQL.
Uruchom ręcznie:
źródło