#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 для пула соединений, безопасного для параллелизма «.