Je souhaite supprimer toutes les connexions (sessions) actuellement ouvertes à une base de données PostgreSQL spécifique, mais sans redémarrer le serveur ni déconnecter les connexions à d'autres bases de données.
Comment puis je faire ça?
Je souhaite supprimer toutes les connexions (sessions) actuellement ouvertes à une base de données PostgreSQL spécifique, mais sans redémarrer le serveur ni déconnecter les connexions à d'autres bases de données.
Comment puis je faire ça?
Réponses:
Voici ma réponse à une question très similaire sur StackOverflow.
En fonction de votre version de postgresql, vous pouvez rencontrer un bogue qui
pg_stat_activity
empêche les connexions actives des utilisateurs supprimés. Ces connexions ne sont pas non plus représentées dans pgAdminIII.Si vous effectuez des tests automatiques (dans lesquels vous créez également des utilisateurs), cela pourrait être un scénario probable.
Dans ce cas, vous devez revenir à des requêtes telles que:
la source
La requête comme celle-ci devrait aider (en supposant que la base de données s'appelle 'db'):
pid
appelait auparavantprocpid
, donc si vous utilisez une version de postgres antérieure à 9.2, essayez ce qui suit:Cependant, vous devez être un superutilisateur pour déconnecter les autres utilisateurs.
Cela pourrait également être utile,
REVOKE CONNECT ON DATABASE FROM PUBLIC
ou quelque chose de similaire, et ensuiteGRANT
.la source
Cela peut être utilisé pour "libérer" une base de données des connexions client, afin que vous puissiez par exemple la renommer:
Sachez que cela peut entraîner un comportement problématique pour vos applications clientes. Les données actuelles ne doivent pas être interrompues en raison de l’utilisation de transactions.
la source