Я создал Api с golang и postgresql как базу данных.Postgresql with golang, вопросы
после нескольких запросов, то API происходит сбой с ошибкой 500 и журналом, который отображает
рдом: К сожалению, слишком многие клиенты уже
Сначала это было, потому что я не рядом строк когда я выбираю, поэтому у меня есть rows.close() все.
Но это не так, потому что у меня уже есть эта ошибка.
Затем увидел, что запуск базы данных занимает всего 3 мс, я думал, что должен начать и закрыть базу данных по каждому запросу, чтобы сбросить все соединения, , но подумать об этом немного больше, это ерунда.
Итак, я спрашиваю вас, как эта ошибка работает, заключается в том, что клиентские соединения сбрасываются через определенное время или соединение отключается до перезагрузки сервера для клиента?
Если он сбрасывается через определенное время, каковы недостатки увеличения максимального количества клиентских соединений?
Мой код:
Я открываю дб, как это в начале программы:
var gest Gestion
type Gestion struct {
Db *sql.DB
DbLog *sql.DB
}
func InitDbUser() *sql.DB {
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", DB_USER, DB_PASSWORD, DB_NAME)
db, err := sql.Open("postgres", dbinfo)
LogFatalError(err)
err2 := db.Ping()
LogFatalError(err2)
return db
}
func main() {
gest.Db = InitDbUser()
defer gest.Db.Close()
//routing is here
}
И когда я использую этот запрос в моих PSQL:
select min_val,max_val from pg_settings where name='max_connections';
я шляпу:
min_val | max_val
---------+---------
1 | 8388607
S иться за мой английский, я надеюсь, вы понимаете, что я спрашиваю :)
Не зная, как управлять соединениями базы данных является трудно догадаться, что не так. – Sebastian
У меня есть редактирование. :) – Fantasim
В общем, вы должны использовать пул соединений и убедиться, что вы не используете одно и то же соединение одновременно. – Sebastian