Heim >Backend-Entwicklung >Golang >Warum kann ich eine offene Datenbank in Postgres nicht löschen?
Beim Versuch, eine Datenbank zu löschen, kann der Fehler auftreten:
pq: cannot drop the currently open database
Dieser Fehler tritt auf, weil Sie es versuchen Löschen Sie die Datenbank, mit der Sie derzeit verbunden sind. Durch das Löschen einer Datenbank werden alle offenen Verbindungen zu ihr ungültig, einschließlich der von Ihnen verwendeten.
Um dieses Problem zu beheben, wird empfohlen, eine Verbindung zu einer anderen Datenbank herzustellen und DROP DATABASE auszuführen Befehl von dort. Dadurch wird sichergestellt, dass Sie über eine aktive Verbindung zum Ausführen des Befehls verfügen und gleichzeitig das Problem des Löschens der aktuellen Datenbank vermieden wird.
Beispielcode:
// Connect to a secondary database otherDbConn, err := sql.Open("postgres", "host=localhost port=5432 user=username dbname=otherdb") if err != nil { return err } // Execute DROP DATABASE command on other database _, err = otherDbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) if err != nil { return err } // Close the connection to the other database otherDbConn.Close()
Wenn Sie keine Verbindung zu einer anderen Datenbank herstellen können oder dies nicht möchten, können Sie alle Clients zwangsweise von der Datenbank trennen, die Sie löschen möchten. Dies erfordert Superuser-Rechte und sollte mit Vorsicht verwendet werden.
Für Postgres-Versionen unter 9.2:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Für Postgres-Versionen 9.2 und höher:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Nachher erzwungen Wenn Sie alle Clients trennen, können Sie eine Verbindung zu einer anderen Datenbank herstellen und den Befehl DROP DATABASE ausführen.
Das obige ist der detaillierte Inhalt vonWarum kann ich eine offene Datenbank in Postgres nicht löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!