Heim > Backend-Entwicklung > Golang > Wie behebe ich den Fehler „pq: Die aktuell geöffnete Datenbank kann nicht gelöscht werden' in Postgres?

Wie behebe ich den Fehler „pq: Die aktuell geöffnete Datenbank kann nicht gelöscht werden' in Postgres?

Linda Hamilton
Freigeben: 2024-11-13 02:50:02
Original
575 Leute haben es durchsucht

How to Fix the

Fehlerbehebung beim Postgres-Datenbank-Löschfehler: „pq: Die aktuell geöffnete Datenbank kann nicht gelöscht werden“

In Postgres kann der Fehler „pq : Die derzeit geöffnete Datenbank kann nicht gelöscht werden“, wenn Sie versuchen, die Datenbank zu löschen, mit der Sie derzeit verbunden sind. Dieser Fehler tritt auf, weil das Löschen einer Datenbank das Trennen aller offenen Verbindungen dazu erfordert, was Ihre aktuelle Verbindung trennen und Sie daran hindern würde, die DROP DATABASE-Anweisung auszuführen.

Lösung:

Wie in der Postgres-Dokumentation vorgeschlagen, sollten Sie eine Verbindung zu einer anderen Datenbank herstellen und von dort aus den Befehl DROP DATABASE ausführen. Dadurch wird sichergestellt, dass in der Datenbank, die Sie löschen möchten, keine aktiven Verbindungen vorhanden sind.

Beispiel:

import (
    "database/sql"
    "fmt"
)

func main() {
    // Connect to a different database (e.g., "template1")
    conn, err := sql.Open("postgres", "host=localhost user=postgres dbname=template1")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // Drop the original database from the new connection
    _, err = conn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, "mydb"))
    if err != nil {
        panic(err)
    }

    fmt.Println("Database dropped successfully.")
}
Nach dem Login kopieren

Client-Trennung erzwingen (Vorsicht):

In Szenarien, in denen ein anderer Client mit der Datenbank verbunden ist, können Sie erwägen, alle Clients zwangsweise zu trennen, um die Datenbank zu erleichtern löschen.

-- For PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

-- For PostgreSQL >= 9.2
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Nach dem Login kopieren

Hinweis: Diese Aktion erfordert Superuser-Rechte und sollte mit Vorsicht verwendet werden, da sie aktive Sitzungen unterbrechen kann.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „pq: Die aktuell geöffnete Datenbank kann nicht gelöscht werden' in Postgres?. 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