PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

psql:FATAL:troppe connessioni per il ruolo

Da qualsiasi DB del cluster:

Catch 22:devi prima essere connesso a un database. Forse puoi connetterti come un altro utente? (Per impostazione predefinita, alcune connessioni sono riservate ai superutenti con superuser_reserved_connections impostazione.)

Per ottenere informazioni dettagliate per ogni connessione da parte di questo utente:

SELECT *
FROM   pg_stat_activity
WHERE  usename = 'user_name';

Come stesso utente oppure come superutente puoi cancellare tutte le (altre) connessioni di un utente:

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();

Meglio essere sicuri che sia giusto farlo. Non vuoi terminare query (o connessioni) importanti in questo modo.

pg_cancel_backend() e pg_terminate_backend() nel manuale.

Da una shell Linux

Hai avviato tu stesso quelle altre connessioni? Forse un tuo copione sospeso? Dovresti essere in grado di ucciderli (se sei sicuro che sia possibile farlo).

Puoi indagare con ps quali processi potrebbero essere in errore:

ps -aux
ps -aux | grep psql

Se identifichi un processo da uccidere (meglio essere sicuri, non voglio uccidere il server):

kill  123457689 # pid of process here.

Oppure con SIGKILL invece di SIGTERM :

kill -9 123457689