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, но до сих пор я не использовал командную строку. У меня была та же проблема, и я обнаружил, что самый простой способ решить проблему в моем случае - просто удалить процессы, перечисленные в разделе "Активность базы данных" на панели инструментов.
(просто нажмите 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 (дубликат)