golang postgres 连接错误太多
golang postgres too many connections error
我是 Golang/Postgres 的新手,我正在做一些测试并收到 pq: 抱歉,已经有太多客户 错误。我的 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 (,,)", 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 (,,)", 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 进行测试。
不要在循环中使用延迟。
因为它会在函数 returns.
时执行
我是 Golang/Postgres 的新手,我正在做一些测试并收到 pq: 抱歉,已经有太多客户 错误。我的 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 (,,)", 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 (,,)", 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 进行测试。
不要在循环中使用延迟。 因为它会在函数 returns.
时执行