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.") }
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';
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!