Не освобождаются подключения к postgresql golang

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

В небольшом веб приложении использую движок "github.com/lib/pq"

Инициализирую глобальную переменную db и открываю соединение в отдельном модуле с параметрами:

    db.SetMaxOpenConns(10)                 // Максимальное количество открытых соединений
    db.SetMaxIdleConns(5)                  // Максимальное количество соединений в пуле
    db.SetConnMaxLifetime(time.Minute * 5) // Максимальное время жизни соединения в пуле

в main использую эту же переменную db и запросы выполняю в основном через QueryRow, для тех что делаю через Query после завершения цикла перебора выполняю rows.Close(). Но при каждом переходе или запросе на странице счётчик соединений db.Stats().InUse растёт и не уменьшается, после предельного значения веб сервер перестаёт отображать страницы. Как правильно работать с пулом соединений так чтобы сайт не ложился?

Ответы

▲ 0Принят

Отвечу на свой же вопрос. В коде использовался метод QueryRow закрывающий соединение только после выполнения метода Scan к результату запроса. Но так же в коде было много мест где получение результата запроса не требовалось, Scan не выполнялся и соответственно соединение висело открытым. Для выполнения запросов не требующих получения результата лучше использовать метод Exec, который возвращает соединение в пул сразу после выполнения.