Immer wenn ich versuche, die Datenbank zu löschen, erhalte ich:
ERROR: database "pilot" is being accessed by other users
DETAIL: There is 1 other session using the database.
Wenn ich benutze:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';
Ich habe die Verbindung von dieser Datenbank beendet, aber wenn ich danach versuche, die Datenbank zu löschen, stellt jemand automatisch eine Verbindung zu dieser Datenbank her und gibt diesen Fehler aus. Was könnte das tun? Niemand außer mir benutzt diese Datenbank.
quelle
GRANT CONNECT ON DATABASE thedb TO public;
Immer wenn ich versuche, die Datenbank zu löschen, erhalte ich:
Zuerst müssen Sie widerrufen
Dann benutze:
Es wird sicherlich funktionieren.
quelle
Ich habe eine Lösung für dieses Problem gefunden. Versuchen Sie, diesen Befehl im Terminal auszuführen
Prozess mit diesem Befehl beenden
quelle
Überprüfen Sie einfach, welche Verbindung besteht und woher sie kommt. Sie können dies alles sehen in:
Vielleicht ist es deine Verbindung?
quelle
Dies bedeutet, dass ein anderer Benutzer auf die Datenbank zugreift. Starten Sie PostgreSQL einfach neu. Dieser Befehl erledigt den Trick
Versuchen Sie dann, die Datenbank zu löschen:
Dies wird den Trick machen.
quelle
pgAdmin 4- Lösung mit Benutzeroberfläche
Aktivieren Sie zuerst die Showaktivität im Dashboard, wenn Sie Folgendes nicht getan haben:
Deaktivieren Sie nun alle Prozesse mit der Datenbank:
Sollte nun in der Lage sein, die Datenbank zu löschen.
quelle
Wenn keine potenziellen Auswirkungen auf andere Dienste auf Ihrem Computer auftreten, einfach
service postgresql restart
quelle
Lösung:
1. Fahren Sie den Pg-Server herunter. 2. Die Verbindung wird unterbrochen. 3. Starten Sie den Pg-Server neu. 4. Versuchen Sie Ihren Befehl
quelle
So einfach ist das
quelle
In meinem Fall verwende ich AWS Redshift (basierend auf Postgres). Und es scheint, dass es keine anderen Verbindungen zur Datenbank gibt, aber ich erhalte den gleichen Fehler.
In meinem Fall scheint der Datenbankcluster noch einige Verarbeitungsvorgänge für die Datenbank durchzuführen, und obwohl keine anderen externen / Benutzerverbindungen bestehen, wird die Datenbank weiterhin intern verwendet. Ich habe dies gefunden, indem ich Folgendes ausgeführt habe:
Mein Hack bestand also darin, eine Schleife in meinen Code zu schreiben und nach Zeilen mit meinem Datenbanknamen zu suchen. (Natürlich ist die Schleife nicht unendlich und ist eine verschlafene Schleife usw.)
Wenn Zeilen gefunden wurden, löschen Sie jede PID nacheinander.
Wenn keine Zeilen gefunden wurden, löschen Sie die Datenbank
Hinweis: In meinem Fall schreibe ich Java-Unit- / Systemtests, bei denen dies als akzeptabel angesehen werden kann. Dies ist für den Produktionscode nicht akzeptabel.
Hier ist der komplette Hack in Java (ignoriere meine Test- / Utility-Klassen).
quelle
Meiner Meinung nach laufen im Hintergrund einige Leerlaufabfragen.
Hinweis: Das Beenden einer ausgewählten Abfrage hat keine negativen Auswirkungen
quelle
REVOKE CONNECT
verhindert nicht die Verbindungen vom Datenbankbesitzer oder Superuser. Wenn Sie also nicht möchten, dass jemand die Datenbank verbindet, kann der Befehl follow hilfreich sein.Dann benutze:
quelle
Während ich die beiden Antworten mit der höchsten Bewertung bei anderen Gelegenheiten nützlich fand, bestand der einfachste Weg, das Problem zu lösen, darin, zu erkennen, dass PyCharm möglicherweise eine Sitzung offen hält, und wenn ich
Stop
auf PyCharm klickte , könnte dies hilfreich sein. Bei geöffnetem pgAdmin4 im Browser tat ich dies und sah fast sofort, dass die Statistiken der Datenbanksitzungen auf 0 fielen. Zu diesem Zeitpunkt konnte ich die Datenbank löschen.quelle
Versuchen Sie unter macOS, die postgresql-Datenbank über die Konsole mit dem folgenden Befehl neu zu starten:
quelle
Versuchen Sie im Terminal diesen Befehl:
Sie werden sehen wie:
Die dritte Nummer (3645) ist PID.
Sie können dies löschen
Und danach starten Sie Ihre PostgreSQL-Verbindung.
Manuell starten:
quelle