Cela supprimera les connexions existantes, sauf la vôtre :
Requête pg_stat_activity
et obtenez les valeurs de pid que vous voulez tuer, puis lancez SELECT pg_terminate_backend(pid int)
à eux.
PostgreSQL 9.2 et supérieur :
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- change this to your DB
AND pid <> pg_backend_pid();
PostgreSQL 9.1 et inférieur :
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- change this to your DB
AND procpid <> pg_backend_pid();
Une fois que vous avez déconnecté tout le monde, vous devez vous déconnecter et lancer la commande DROP DATABASE à partir d'une connexion d'une autre base de données (pas celle que vous essayez de supprimer).
Notez le changement de nom de la procpid
colonne à pid
. Voir ce fil de la liste de diffusion .
1 votes
Quelle version de PostgreSQL utilisez-vous ?
1 votes
Problème : Bien que vous puissiez tuer les sessions connectées à la base de données, elles peuvent se reconnecter si rapidement que vous ne pouvez toujours pas déposer la base de données. Heureusement, cet article montre comment verrouiller les nouvelles connexions, ce qui vous permet de tuer les connexions actuelles et de supprimer la base de données comme prévu : dba.stackexchange.com/questions/11893/
1 votes
J'ai trouvé cette réponse sur dba.stackexchange très utile. dba.stackexchange.com/a/11895/163539 -- succinct mais suffisamment explicatif.