sql.DB в Go - это пул соединений, а не одно соединение. Две ключевые настройки:
db, _ := sql.Open("postgres", dsn)
// Максимум открытых соединений (0 = безлимитно, опасно!)
db.SetMaxOpenConns(25)
// Максимум простаивающих соединений в пуле
db.SetMaxIdleConns(10)
// Максимальное время жизни соединения
db.SetConnMaxLifetime(5 * time.Minute)
// Максимальное время простоя
db.SetConnMaxIdleTime(1 * time.Minute)
Без SetMaxOpenConns при всплеске нагрузки Go откроет сотни соединений, что может убить PostgreSQL (каждое соединение ~10 МБ RAM). Рекомендуемые значения зависят от числа ядер БД-сервера, обычно 20-50.
SetMaxIdleConns определяет, сколько соединений держать "наготове" для быстрого обслуживания запросов без TCP handshake.