PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment supprimer une base de données PostgreSQL s'il y a des connexions actives vers celle-ci ?

Cela supprimera les connexions existantes à l'exception de la vôtre :

Requête pg_stat_activity et obtenez les valeurs de pid que vous voulez tuer, puis émettez 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 versions antérieures :

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 devrez vous déconnecter et émettre la commande DROP DATABASE à partir d'une connexion à partir d'une autre base de données, c'est-à-dire pas celle que vous essayez de supprimer.

Notez le changement de nom du procpid colonne en pid . Voir ce fil de liste de diffusion.