Heim > Backend-Entwicklung > Golang > Wie lösche ich eine aktuell verbundene PostgreSQL-Datenbank?

Wie lösche ich eine aktuell verbundene PostgreSQL-Datenbank?

Mary-Kate Olsen
Freigeben: 2024-11-19 12:15:03
Original
720 Leute haben es durchsucht

How to Drop a Currently Connected PostgreSQL Database?

Fehler beim Löschen der derzeit verbundenen Postgres-Datenbank

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
Nach dem Login kopieren

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.

Lösung

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
}
Nach dem Login kopieren

Alternativer Ansatz (Verbindungstrennung erzwingen)

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';
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage