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

psql :FATAL :trop de connexions pour le rôle

Depuis n'importe quelle base de données du cluster :

Catch 22 :vous devez d'abord être connecté à une base de données. Peut-être pouvez-vous vous connecter en tant qu'autre utilisateur ? (Par défaut, certaines connexions sont réservées aux super-utilisateurs avec le superuser_reserved_connections réglage.)

Pour obtenir des informations détaillées pour chaque connexion par cet utilisateur :

SELECT *
FROM   pg_stat_activity
WHERE  usename = 'user_name';

En tant que même utilisateur ou en tant que superutilisateur, vous pouvez annuler toutes les (autres) connexions d'un utilisateur :

SELECT pg_cancel_backend(pid)     -- (SIGINT)
    -- pg_terminate_backend(pid)  -- the less patient alternative (SIGTERM)
FROM   pg_stat_activity
WHERE  usename = 'user_name'
AND    pid <> pg_backend_pid();

Mieux vaut être sûr que c'est ok de le faire. Vous ne voulez pas mettre fin à des requêtes (ou connexions) importantes de cette façon.

pg_cancel_backend() et pg_terminate_backend() dans le manuel.

Depuis un shell Linux

Avez-vous démarré ces autres connexions vous-même ? Peut-être un de vos scripts suspendus ? Vous devriez pouvoir les tuer (si vous êtes sûr que vous pouvez le faire).

Vous pouvez enquêter avec ps quels processus pourraient être en faute :

ps -aux
ps -aux | grep psql

Si vous identifiez un processus à tuer (mieux vaut être sûr que vous ne le faites pas veux tuer le serveur):

kill  123457689 # pid of process here.

Ou avec SIGKILL au lieu de SIGTERM :

kill -9 123457689