Lorsque vous essayez de supprimer la base de données à laquelle vous êtes actuellement connecté dans Postgres, vous pouvez rencontrer l'erreur suivante :
pq: cannot drop the currently open database
Cette erreur se produit car les suppressions de bases de données nécessitent une connexion fermée à la base de données en cours de suppression. La confusion réside dans l'incapacité d'exécuter DROP DATABASE à l'aide de dbConn.Exec si la connexion est fermée.
L'approche recommandée pour supprimer une base de données actuellement connectée consiste à se connecter à une autre base de données et exécutez la commande DROP DATABASE à partir de là. En effet, la connexion à la base de données en cours de suppression devient invalide lors de sa suppression.
Par exemple :
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 }
Dans les scénarios où un Si un client différent est connecté à la base de données en cours de suppression et que vous avez besoin d'une suppression urgente, vous pouvez forcer la déconnexion de tous les clients de la base de données cible à l'aide des commandes suivantes (les exigences varient en fonction de Version PostgreSQL) :
-- 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';
Remarque : Exécutez ces commandes avec les privilèges de superutilisateur. Une fois les clients déconnectés de force, 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!