首页 文章

golang postgres太多连接错误

提问于
浏览
0

我是Golang / Postgres的新手,我正在做一些测试并得到 pq: sorry, too many clients already 错误 . 我的postgres实例设置为最多100个连接,我在此代码中收到该错误

for i := 0; i < 10000; i++ {
    profile_id = profile_id+1
    on, err := db.Query("insert into streams (post,profile_id,created_on) values ($1,$2,$3)", post, profile_id, created_on)
    defer on.Close()

    if err != nil {
        fmt.Fprintln(w, "-1")
        log.Fatal(err)
    }
}

我通常可以获得大约60到70个插入,然后我得到了这个错误 . 所有连接都来自For循环中的一个样本 . 我可以做错什么,这是我的完整代码 . 据我所知,1连接可以容纳许多不同的查询,所以我不知道为什么它只给我60到70个插入然后得到错误 .

func Insert_Stream(w http.ResponseWriter, r *http.Request) {


wg := sync.WaitGroup{}
wg.Add(1)


go func(){
    defer wg.Done()

db, err := sql.Open("postgres", Postgres_Connect)
if err != nil {
    log.Fatal(err)
    println(err)

}
defer db.Close()

r.ParseForm()
post := r.FormValue("post")
profile_id,err := strconv.Atoi(r.FormValue("profile_id"))
created_on := time.Now()
for i := 0; i < 10000; i++ {
    profile_id = profile_id+1
    on, err := db.Query("insert into streams (post,profile_id,created_on) values ($1,$2,$3)", post, profile_id)
    defer on.Close()

    if err != nil {
        fmt.Fprintln(w, "-1")
        log.Fatal(err)
    }
}

fmt.Fprintln(w, "1")

}()
wg.Wait()

}

我基本上是将10,000条记录插入数据库,并使用不同的配置文件ID进行测试 .

1 回答

  • 1

    不要在循环中使用延迟 . 因为它会在函数返回时执行 .

相关问题