Heim >Backend-Entwicklung >Golang >Warum kann ich eine offene Datenbank in Postgres nicht löschen?

Warum kann ich eine offene Datenbank in Postgres nicht löschen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 10:28:02513Durchsuche

Why Can't I Drop an Open Database in Postgres?

Fehler beim Löschen einer geöffneten Datenbank in Postgres

Fehler aufgetreten

Beim Versuch, eine Datenbank zu löschen, kann der Fehler auftreten:

pq: cannot drop the currently open database

Verstehen des Problems

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.

Empfohlene Lösung

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()

Alternative Lösung: Erzwungene Client-Verbindungstrennung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn