Eine verbundene Datenbank in Postgres löschen
Beim Versuch, eine Datenbank zu löschen, mit der Sie derzeit verbunden sind, ist ein Fehler aufgetreten: „pq: Die aktuell geöffnete Datenbank kann nicht gelöscht werden. Dieser Fehler ist auf das erwartete Verhalten in Postgres zurückzuführen, das das Löschen einer Datenbank mit einer aktiven Verbindung dazu verbietet.
Dieses Verhalten ist sinnvoll, da das Löschen einer Datenbank alle offenen Verbindungen, die auf sie verweisen, ungültig macht. Um eine Datenbank erfolgreich zu löschen, müssen Sie sicherstellen, dass keine aktiven Verbindungen vorhanden sind.
Empfohlener Ansatz
Der empfohlene Ansatz besteht darin, eine Verbindung zu einer anderen Datenbank herzustellen und den Befehl DROP DATABASE auszuführen aus dieser Verbindung. Dadurch wird sichergestellt, dass Sie keine offenen Verbindungen zu der Datenbank haben, die Sie trennen möchten.
Zwangsweises Trennen von Clients
In Situationen, in denen andere Clients mit der Datenbank verbunden sind Sie müssen sie fallen lassen, Sie können sie gewaltsam trennen. Beachten Sie, dass hierfür Superuser-Rechte erforderlich sind.
Für PostgreSQL-Versionen vor 9.2:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Für PostgreSQL-Versionen 9.2 und höher:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Sobald alle Clients zwangsweise getrennt wurden, können Sie eine Verbindung zu einer anderen Datenbank herstellen und ausführen Führen Sie erneut den Befehl DROP DATABASE aus.
Zusätzlicher Hinweis
In Ihrem spezifischen Codebeispiel versuchen Sie, die Verbindung zu schließen, nachdem Sie den Befehl DROP DATABASE ausgeführt haben. Dieser Schritt ist unnötig und kann zu unerwartetem Verhalten führen. Stellen Sie einfach eine Verbindung zu einer anderen Datenbank her, bevor Sie den Befehl DROP DATABASE ausführen, und Sie werden die Verbindung zu der Datenbank, die Sie getrennt haben, erfolgreich schließen.
Das obige ist der detaillierte Inhalt vonWie lösche ich eine Postgres-Datenbank, mit der Sie gerade verbunden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!