Lorsque vous essayez de supprimer une base de données, vous pouvez rencontrer l'erreur :
pq: cannot drop the currently open database
Cette erreur se produit parce que vous essayez de supprimer la base de données à laquelle vous êtes actuellement connecté. La suppression d'une base de données invalide toutes les connexions ouvertes à celle-ci, y compris celle que vous utilisez.
Pour résoudre ce problème, il est recommandé de se connecter à une autre base de données et d'exécuter la commande DROP DATABASE. commande à partir de là. Cela garantit que vous disposez d'une connexion active pour exécuter la commande tout en évitant le problème de suppression de la base de données actuelle.
Exemple de code :
// 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()
Si vous ne pouvez pas vous connecter à une autre base de données ou si vous préférez ne pas le faire, vous pouvez forcer la déconnexion de tous les clients de la base de données que vous souhaitez supprimer. Cela nécessite des privilèges de superutilisateur et doit être utilisé avec prudence.
Pour les versions de Postgres inférieures à 9.2 :
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Pour les versions de Postgres 9.2 et supérieures :
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Après avoir forcé en déconnectant tous les clients, vous pouvez vous connecter à une autre base de données et exécuter la commande DROP DATABASE.
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!