pgx в сообщении goroutine о том, что соединение занято

#postgresql #go

#postgresql #Вперед

Вопрос:

Мое приложение используется pgx для выполнения запросов к базе данных в программе. Тем не менее, я получаю ошибки занятости соединения. Есть ли способ создать программу goroutine

 func writeDb(dbconn *pgx.Conn) {
   sqlWritePost := `QUERY_HERE`
   _, err := dbconn.Exec(context.Background(), sqlWritePost, v.Url, v.Content, v.StrippedContent, v.Posthash)
   if err != nil {
       fmt.Println(err)
       os.Exit(1)
    }
}

func main() {

   var dbconn *pgx.Conn
   dbconn, err := pgx.Connect(context.Background(), os.Getenv("database_string"))
   if err != nil {
       fmt.Println(err)
       os.Exit(1)
   }
   ...
   go writeDb(dbconn)
   ...

}
  

Я получаю ошибки conn busy . Есть ли способ структурировать мой код, чтобы избежать этой проблемы?
Спасибо!

Комментарии:

1. Совершенно нормально использовать БД в программе goroutine, в противном случае это было бы бесполезно, например, для HTTP-сервера. Подобные ошибки обычно вызываются тем, что строки не вызываются. Закрыть .

2. Я не фиксирую значение строк. Насколько я понимаю, это из функции Query(), нет?

3. Моя ошибка, я недостаточно внимательно посмотрел. » *pgx.Conn представляет собой одно соединение с базой данных и не является безопасным для параллелизма. Используйте подпакет pgxpool для пула соединений, безопасного для параллелизма «.