Maison > développement back-end > Golang > le corps du texte

Comment corriger l'erreur « pq : impossible de supprimer la base de données actuellement ouverte » dans Postgres ?

Linda Hamilton
Libérer: 2024-11-13 02:50:02
original
543 Les gens l'ont consulté

How to Fix the

Dépannage de l'erreur de suppression de la base de données Postgres : "pq : impossible de supprimer la base de données actuellement ouverte"

Dans Postgres, vous pouvez rencontrer l'erreur "pq : impossible de supprimer la base de données actuellement ouverte" lorsque vous tentez de supprimer la base de données à laquelle vous êtes actuellement connecté. Cette erreur se produit car la suppression d'une base de données nécessite la déconnexion de toutes les connexions ouvertes, ce qui déconnecterait votre connexion actuelle et vous empêcherait d'exécuter l'instruction DROP DATABASE.

Solution :

Comme suggéré dans la documentation Postgres, vous devez vous connecter à une autre base de données et exécuter la commande DROP DATABASE à partir de là. Cela garantit qu'aucune connexion active n'existe dans la base de données que vous souhaitez supprimer.

Exemple :

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.")
}
Copier après la connexion

Forcer la déconnexion du client (mise en garde) :

Dans les scénarios où un autre client est connecté à la base de données, vous pouvez envisager de déconnecter de force tous les clients pour faciliter la suppression de la base de données.

-- 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';
Copier après la connexion

Remarque : Cette action nécessite des privilèges de superutilisateur et doit être utilisé avec prudence car cela peut interrompre les sessions actives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal