Jak mogę zabić wszystkie moje połączenia Postgresql?
Próbuję, rake db:drop
ale dostaję:
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
Próbowałem zamknąć procesy, które widzę z, ps -ef | grep postgres
ale to też nie działa:
kill: kill 2358 failed: operation not permitted
database
postgresql
DanS
źródło
źródło
Odpowiedzi:
Możesz użyć pg_terminate_backend (), aby zabić połączenie. Aby korzystać z tej funkcji, musisz być superużytkownikiem. Działa to we wszystkich systemach operacyjnych tak samo.
Przed wykonaniem tego zapytania musisz cofnąć uprawnienia CONNECT, aby uniknąć nowych połączeń:
źródło
sudo
zabić?sudo
w PG.REVOKE
krok. Uratowałeś kogoś, chyba jeszcze raz!Może po prostu uruchom ponownie
postgres
=>sudo service postgresql restart
źródło
brew services restart postgresql
jeśli masz naparWszystkie informacje o trwającym procesie:
źródło
MacOS, jeśli postgresql został zainstalowany z zaparzeniem :
Źródło: Zabij sesję / połączenie postgresql
źródło
OSX, Postgres 9.2 (zainstalowany z homebrew)
Jeśli twój katalog danych znajduje się gdzie indziej, możesz dowiedzieć się, gdzie on jest, sprawdzając dane wyjściowe
ps aux | grep postgres
źródło
brew services restart postgresql
pg_ctl restart -D /usr/local/var/postgres
załatwiło sprawę! (Nie uruchomiłem nawet pierwszego ani trzeciego polecenia).Wydaje się, że działa to dla PostgreSQL 9.1:
Zniesione z istoty znalezionej tu i tutaj .
Oto zmodyfikowana wersja, która działa zarówno dla PostgreSQL 9.1, jak i 9.2.
źródło
Korzystam z następującego zadania prowizji, aby zastąpić
drop_database
metodę Rails .lib/database.rake
Edycja: dotyczy Postgresql 9.2+
źródło
pg_stat_activity.procpid
zamiastpg_stat_activity.pid
Postgres 9.1 i niższych. Zobacz stackoverflow.com/a/5408501/444774Łatwiejszym i bardziej aktualnym sposobem jest:
ps -ef | grep postgres
aby znaleźć połączenie #sudo kill -9 "#"
połączeniaUwaga: Może istnieć identyczny PID. Zabicie jednego zabija wszystkich.
źródło
Miałem ten problem i problem polegał na tym, że Navicat był podłączony do mojej lokalnej bazy danych Postgres. Po odłączeniu Navicat problem zniknął.
EDYTOWAĆ:
Ponadto jako ostateczność można wykonać kopię zapasową danych, a następnie uruchomić polecenie:
... co zabije wszystko, do czego użytkownik postgres ma dostęp. Unikaj robienia tego na maszynie produkcyjnej, ale nie powinieneś mieć problemu ze środowiskiem programistycznym. Ważne jest, aby upewnić się, że każdy
postgres
proces naprawdę się zakończył, zanim spróbujesz ponownie uruchomić PostgreSQL.EDYCJA 2:
Ze względu na ten post unix.SE zmieniłem z
kill -9
nakill -15
.źródło
Rozwiązałem ten sposób:
W moim 64 -bitowym systemie Windows 8 po prostu
restart
usługa: postgresql-x64-9.5źródło
źródło
Chciałem tylko zaznaczyć, że odpowiedź Harisa może nie działać, jeśli z bazy danych korzysta inny proces działający w tle, w moim przypadku były to zadania opóźnione:
I dopiero wtedy mogłem upuścić / zresetować bazę danych.
źródło
Zamknij postgres i uruchom go ponownie. Proste, ale działa za każdym razem dla mnie, gdzie czasami inne polecenia CLI nie działają.
źródło
Nie trzeba go upuszczać. Wystarczy usunąć i ponownie utworzyć schemat publiczny. W większości przypadków ma to dokładnie taki sam efekt.
źródło
Scenariusz zdalny. Ale jeśli próbujesz uruchomić testy w aplikacji railsowej, a otrzymasz coś takiego
„ActiveRecord :: StatementInvalid: PG :: ObjectInUse: ERROR: baza danych„ test_aplikacji ”jest uzyskiwany przez innych użytkowników SZCZEGÓŁ: Z bazy danych korzysta 1 inna sesja.”
Upewnij się, że zamknąłeś pgAdmin lub inne narzędzia GUI postgres przed uruchomieniem testów.
źródło
Przypadek:
Nie można wykonać zapytania:
Rozwiązanie:
a. Wyświetl zapytanie Status Aktywność w następujący sposób:
b. Znajdź wiersz, w którym znajduje się kolumna „Zapytanie”:
do. W tym samym wierszu uzyskaj wartość kolumny „PID”
re. Uruchom następujące skrypty:
źródło
Jestem na komputerze Mac i korzystam z Postgres przez
Postgres.app
. Rozwiązałem ten problem po prostu zamykając i uruchamiając ponownie aplikację.źródło
Otwórz PGadmin, aby sprawdzić, czy jest otwarta strona zapytania, zamknij wszystkie strony zapytania i odłącz serwer PostgresSQL, a następnie podłącz go ponownie i spróbuj usunąć / upuścić. Pomogło mi to.
źródło
W PG admin możesz rozłączyć serwer (kliknij prawym przyciskiem myszy na serwerze), a wszystkie sesje zostaną rozłączone przy ponownym uruchomieniu
źródło
Dla mnie zadziałało:
Używam:
gitlab_edition: "gitlab-ce"
gitlab_version: '12 .4.0-ce.0.el7 '
źródło
Najpierw znajdź Postgres, który port działa
ps -ef | grep postgres
zwróci numer portu
zabij -9
port_number
W końcu ponownie uruchom Postgres
źródło