554 Stimmen

Eine Postgresql-Sitzung/Verbindung beenden

Wie kann ich alle meine Postgresql-Verbindungen beenden?

Ich versuche eine rake db:drop aber ich verstehe:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

Ich habe versucht, die Prozesse zu beenden, die ich in einer ps -ef | grep postgres aber auch das funktioniert nicht:

kill: kill 2358 failed: operation not permitted

1018voto

Frank Heikens Punkte 105033

Sie können verwenden pg_terminate_backend() um eine Verbindung zu beenden. Sie müssen Superuser sein, um diese Funktion nutzen zu können. Dies funktioniert auf allen Betriebssystemen gleich.

SELECT 
    pg_terminate_backend(pid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

Bevor Sie diese Abfrage ausführen, müssen Sie REVOKE die CONNECT-Berechtigung, um neue Verbindungen zu vermeiden:

REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;

Wenn Sie Postgres 8.4-9.1 verwenden, benutzen Sie procpid anstelle von pid

SELECT 
    pg_terminate_backend(procpid) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    procpid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

275voto

Haris Krajina Punkte 14008

Vielleicht einfach neu starten postgres => sudo service postgresql restart

66voto

Dorian Punkte 20663

Mit allen Informationen über den laufenden Prozess:

SELECT *, pg_terminate_backend(pid)
FROM pg_stat_activity 
WHERE pid <> pg_backend_pid()
AND datname = 'my_database_name';

28voto

Juuso Ohtonen Punkte 7211

MacOS, wenn postgresql wurde installiert mit Gebräu :

brew services restart postgresql

Fuente: Eine Postgresql-Sitzung/Verbindung beenden

19voto

Mr. Rene Punkte 1037

Einfacher und aktueller geht es nicht:

  1. Verwenden Sie ps -ef | grep postgres um die Verbindung zu finden #
  2. sudo kill -9 "#" der Verbindung

Hinweis: Es kann identische PID geben. Das Töten einer tötet alle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X