PSQL: FATAL: слишком много соединений для роли

Я попытался подключиться к серверу базы данных с помощью команды:

psql -h host_ip -d db_name -U user_name --password

Он отображает следующую строку и отказывается подключаться.

psql: FATAL:  too many connections for role "user_name".

Как закрыть активные соединения?
У меня нет прав администратора для базы данных. Я просто обычный пользователь.

7 ответов

Решение

Внутри любой БД кластера:

Поймай 22: сначала нужно подключиться к базе данных. Может быть, вы можете подключиться как другой пользователь?

Чтобы получить подробную информацию для каждого подключения этого пользователя:

SELECT *
FROM   pg_stat_activity
WHERE  usename = 'user_name';

Как тот же пользователь или как суперпользователь, вы можете отменить все (другие) подключения пользователя:

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

Лучше быть уверенным, что это нормально. Вы не хотите завершать важные запросы таким образом.

pg_cancel_backend() а также pg_terminate_backend() в руководстве.

Из оболочки Linux

Ты сам начал эти другие связи? Может быть, ваш сценарий? Вы должны быть в состоянии убить их (если вы уверены, что это нормально).

Вы можете расследовать с ps какие процессы могут быть виноваты:

ps -aux
ps -aux | grep psql

Если вы идентифицируете процесс для уничтожения (лучше быть уверенным, что вы не хотите уничтожать сервер):

kill  12457689 # pid of process here.

Или с SIGKILL вместо SIGTERM:

kill -9 12457689

Я довольно новичок в pgAdmin, но до сих пор я не использовал командную строку. У меня была та же проблема, и я обнаружил, что самый простой способ решить проблему в моем случае - просто удалить процессы, перечисленные в разделе "Активность базы данных" на панели инструментов.

Панель управления pgAdmin

(просто нажмите X на левой стороне PID)

Это немного утомительно, так как вы должны удалять каждый процесс отдельно, но это должно освободить ваши доступные соединения. Надеюсь, это полезно.

Вам необходимо подключиться к вашей базе данных postgresql и выполнить команду:

ALTER ROLE your_username CONNECTION LIMIT -1;

Проверьте pool_size это, вероятно, слишком много или слишком мало установленного значения на локальном psqlнастройки. Вы должны сначала проверить сpool_size = 10(как по умолчанию). Это должно исправить ошибкиtoo_many_connections.

Я получил это для конкретного инцидента. Джанго Девелопмент. У меня была открыта оболочка для запроса моделей django. У меня также работает сервер разработки. Я использовал слон SQL для тестирования/прототипирования. Так что выдало ошибку. Как только я вышел из оболочки django manage.py, он начал работать.

Пожалуйста, проверьте, сколько подключений разрешено для этого пользователя, и вы можете просто отключить другие подключения для этого пользователя и снова войти в систему. Но лучше просто увеличить лимит подключений для этого пользователя.

Эта проблема в основном возникает на PgAdmin. Кажется, что после всех этих лет эта проблема все еще сохраняется.

Это приведет к удалению существующих соединений, кроме ваших:

Запросите pg_stat_activity и получите значения pid, которые вы хотите убить, а затем введите для них SELECT pg_terminate_backend(pid int).

PostgreSQL 9.2 и выше:

      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 и ниже:

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

из /questions/23301969/kak-udalit-bazu-dannyih-postgresql-esli-k-nej-est-aktivnyie-podklyucheniya/23301984#23301984 (дубликат)

Другие вопросы по тегам