使用Postgresql进行1.8上下文超时

时间:2017-03-27 05:44:35

标签: postgresql go pq

在我的控制器的开头,我创建了一个带有超时的上下文:

ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()

然后我在每个数据库请求中使用此上下文,如下所示:

QueryRowContext(ctx, query, ...args) // where ctx is context

但是,当我加载测试程序时,我注意到我的一些请求返回错误"pq: canceling statement due to user request"。而且我提出的请求越多,我得到的错误就越多。

但是,如果我不使用带有超时的上下文,而只使用context.Background(),那么无论请求数量多少,我都不会收到任何错误。

每个请求大约需要50毫秒,因此不会发生超时。我尝试了取消context.WithCancel(context.Background())的上下文,我也遇到了这些错误。

出现这些错误的原因可能是什么?

// create context to cancel working if 10 seconds passed
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()


// parses queries
var response []byte
request := model.GetProductByBarcodeRequest{}
barcode := r.URL.Query().Get("barcode")
storeID := r.URL.Query().Get("store_id")
transactionType := r.URL.Query().Get("type")


request.Barcode = &barcode
request.StoreID = &storeID
request.Type = &transactionType

// processing
result, err := model.GetProductByBarcode(ctx, request)
response = controller.ToJson(result, err)

// writing response to user
w.Write(response)

0 个答案:

没有答案