Suppression d'une base de données connectée dans Postgres
Vous avez rencontré une erreur en essayant de supprimer une base de données à laquelle vous êtes actuellement connecté : "pq : ne peut pas supprimer la base de données actuellement ouverte." Cette erreur provient du comportement attendu dans Postgres, qui interdit de supprimer une base de données avec une connexion active à celle-ci.
Ce comportement est logique car la suppression d'une base de données invalide toutes les connexions ouvertes la référençant. Pour réussir à supprimer une base de données, vous devez vous assurer qu'aucune connexion active n'existe.
Approche recommandée
L'approche recommandée consiste à vous connecter à une autre base de données et à exécuter la commande DROP DATABASE. de cette connexion. Cela garantit que vous n'avez aucune connexion ouverte à la base de données que vous souhaitez supprimer.
Déconnexion forcée des clients
Dans les situations où d'autres clients sont connectés à la base de données vous devez les laisser tomber, vous pouvez les déconnecter de force. Notez que cela nécessite des privilèges de superutilisateur.
Pour les versions PostgreSQL antérieures à 9.2 :
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
Pour les versions PostgreSQL 9.2 et supérieures :
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
Une fois que tous les clients ont été déconnectés de force, vous pouvez vous connecter à une autre base de données et exécuter à nouveau la commande DROP DATABASE.
Remarque supplémentaire
Dans votre exemple de code spécifique, vous tentez de fermer la connexion après avoir exécuté la commande DROP DATABASE. Cette étape est inutile et peut entraîner un comportement inattendu. Connectez-vous simplement à une autre base de données avant d'exécuter la commande DROP DATABASE et vous fermerez avec succès la connexion à la base de données que vous avez supprimée.
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!