Beim Versuch, die Datenbank zu löschen, mit der Sie derzeit in Postgres verbunden sind, kann der folgende Fehler auftreten:
pq: cannot drop the currently open database
Dieser Fehler tritt auf, weil Datenbankverluste eine geschlossene Verbindung zur zu entfernenden Datenbank erfordern. Die Verwirrung liegt darin, dass DROP DATABASE mit dbConn.Exec nicht ausgeführt werden kann, wenn die Verbindung geschlossen ist.
Der empfohlene Ansatz zum Löschen einer aktuell verbundenen Datenbank besteht darin, eine Verbindung zu einer anderen Datenbank herzustellen und Führen Sie von dort aus den Befehl DROP DATABASE aus. Dies liegt daran, dass die Verbindung zur Datenbank, die getrennt wird, beim Löschen ungültig wird.
Zum Beispiel:
import "github.com/lib/pq" ... func dropDatabase(dbName string) error { // Connect to a different database (e.g., template1) otherConn, err := pq.Open("other_conn_string") if err != nil { return err } defer otherConn.Close() // Drop the desired database from the other connection _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) return err }
In Szenarien, in denen a Wenn ein anderer Client mit der zu löschenden Datenbank verbunden ist und Sie eine dringende Entfernung benötigen, können Sie mit den folgenden Befehlen die Trennung aller Clients von der Zieldatenbank erzwingen (die Anforderungen variieren je nach PostgreSQL-Version):
-- PostgreSQL < 9.2 SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb'; -- PostgreSQL >= 9.2 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Hinweis: Führen Sie diese Befehle mit Superuser-Rechten aus. Sobald die Verbindung der Clients erzwungen wird, können Sie eine Verbindung zu einer anderen Datenbank herstellen und den Befehl DROP DATABASE ausführen.
Das obige ist der detaillierte Inhalt vonWie lösche ich eine aktuell verbundene PostgreSQL-Datenbank?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!