Контекст
В настоящее время у меня есть REST API, который управляет данными клиента в БД. Я использую следующий стек:
У меня есть следующие настройки соединения.
// NewConnection ...
func NewConnection() (*gorm.DB, error) {
config := getConfig()
connStr := "host=xx.xx.xx port=5432 user=chavista-hatter dbname=my-db password=abc sslmode=verify-ca sslrootcert=/path/to/rcert sslcert=/path/to/cert sslkey=/path/to/key connect_timeout=0"
db, err := gorm.Open("postgres", conn)
if err != nil {
return nil, err
}
db.DB().SetMaxOpenConns(25)
db.DB().SetMaxIdleConns(25)
db.DB().SetConnMaxLifetime(5 * time.Minute)
db.SingularTable(true)
if config.LogQueries {
db = db.Debug()
}
return db, nil
}
Я получаю соединение в основном классе и вводить это соединение с классом репозитория, который выполняет запросы через Gorm (ORM)
основной класс
db, err := database.NewConnection()
if err != nil {
panic(fmt.Sprintf("failed to connect database --> %v", err))
}
fmt.Println("database connection established successfully")
defer db.Close()
customerRepo := customer.NewRepository(db)
класс репозитория
type repository struct {
db *gorm.DB
}
//NewRepository
func NewRepository(db *gorm.DB) Repository {
return &repository{
db: db,
}
}
func (r *repository) Register(customer *models.Customer) (string, error) {
err := r.db.Create(&customer).Error
if err != nil {
return "", err
}
return customer.key, nil
}
задача
Я отправляю более 500 000 запросов (INSERTS) на мою базу данных с 512 доступными соединениями, и через несколько минут в журнале postgres снова появляется следующая ошибка:
unexpected EOF on client connection with an open transaction
could not receive data from client: Connection reset by peer
Любая помощь?