Wie liste ich aktive Verbindungen auf PostgreSQL auf?

150

Gibt es in PostgreSQL einen Befehl zum Auswählen aktiver Verbindungen zu einer bestimmten Datenbank?

psqlgibt an, dass ich eine meiner Datenbanken nicht löschen kann, weil aktive Verbindungen zu ihr bestehen . Daher möchte ich sehen, welche Verbindungen bestehen (und von welchen Computern).

Tregoreg
quelle
Toll! Ich suche (schlecht) und habe nichts gefunden. Kann ich etwas tun, um die Leerlaufverbindung anderer zu schließen?
Sprecher

Antworten:

262

Oh, ich habe diesen Befehl gerade im PostgreSQL-Forum gefunden:

SELECT * FROM pg_stat_activity;
Tregoreg
quelle
14
Wenn Sie es auf nur eine Datenbank beschränken möchten, können Sie SELECT * FROM pg_stat_activity WHERE datname = 'dbname' verwenden.
user2182349
1
Wie kann ich die aktive Datenbankverbindung von dem bestimmten gesicherten Dienst erhalten?
GunasekaranR
Und wie wäre es nach dem Ausführen pg_terminate_backendund meine App kann immer noch Abfragen für die Datenbank ausführen, aber ich konnte die neuen Verbindungen in pg_Stat_activity nicht sehen?
Takacsot
37

Im Folgenden finden Sie aktive Verbindungen / Abfragen in Postgres DB-

SELECT 
    pid
    ,datname
    ,usename
    ,application_name
    ,client_hostname
    ,client_port
    ,backend_start
    ,query_start
    ,query
    ,state
FROM pg_stat_activity
WHERE state = 'active';

Sie können 'idle' anstelle von active verwenden, um bereits ausgeführte Verbindungen / Abfragen abzurufen.

Neeraj Bansal
quelle
1
Bedeutet Leerlauf, dass die Verbindung aktiv ist? Wenn ich die Verbindung freigebe, wird sie trotzdem als inaktiv aufgeführt?
Shivam Kubde
1
Ja @ShivamKubde, aber als "Leerlauf", und die obige Abfrage zeigt nur "aktive" Verbindungen an. Entfernen Sie daher die WHERE ...Klausel und fügen Sie die Spalte statezur SELECTKlausel hinzu, um zu sehen, welche Verbindungen aktiv oder inaktiv sind.
Mariano Ruiz
6
SELECT * FROM pg_stat_activity WHERE datname = 'dbname' and state = 'active';

Da es pg_stat_activityVerbindungsstatistiken aller Datenbanken mit einem beliebigen Status enthält, sollten entweder idleoder active, Datenbankname und Verbindungsstatus in die Abfrage aufgenommen werden, um die gewünschte Ausgabe zu erhalten.

Abdollah
quelle