gpt4 book ai didi

sql-server - 如何在gorm中为长时间运行的查询设置超时

转载 作者:行者123 更新时间:2023-12-01 21:12:58 49 4
gpt4 key购买 nike

在运行长查询时,有没有一种方法可以将gorm设置为在可配置的时间段后超时?我正在使用mssql。我已经浏览了文档,但是还没有找到方法。

最佳答案

目前,gorm似乎没有实现任何接受context.Context作为参数的查询,例如QueryRowContext正在执行。
您可以创建解决方法,并使用上下文使查询“过期”。

type QueryResponse struct {
MyResult *MyResult
Error error
}

func queryHelper(ctx context.Context) <- chan *QueryResponse {
chResult := make(chan *QueryResponse, 1)
go func() {
//your query here
//...
//blah blah check stuff do whatever you want
//err is an error that comes from the query code
if err != nil {
chResult <- &QueryResponse{nil, err}
return
}
chResult <- &QueryResponse{queryResponse, nil}
} ()
return chResult
}

func MyQueryFunction(ctx context.Context) (*MyResult, error) {
select {
case <-ctx.Done():
return nil, fmt.Errorf("context timeout, query out of time")

case res := <-queryHelper(ctx):
return res.MyResult, res.Error
}
}
然后在上层函数中,无论它是什么,您都可以创建一个上下文并将其传递给 MyQueryFunction。如果查询超过您设置的时间,则会引发错误,您应该(必须)检查它。
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
defer cancel()
res, err := MyQueryFunction(ctx)
if err != nil {
fmt.Printf("err %v", err)
} else {
fmt.Printf("res %v", res)
}
当然,这只是一个例子,没有考虑很多用例,因此必须优先考虑框架内的正确实现。

关于sql-server - 如何在gorm中为长时间运行的查询设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63178632/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com