postgresql - golang postgres 连接错误太多

标签 postgresql go postgresql-9.5 libpq

我是 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 进行测试。

最佳答案

不要在循环中使用 defer。 因为它会在函数返回时执行。

关于postgresql - golang postgres 连接错误太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518168/

相关文章:

java - 性能和可伸缩性的架构问题

go - 如何为wosagger服务websocket?

go - 谁在使用我的 Go 包

sql - 如何在不删除子表的情况下删除 PostgreSQL 中的表

sql - 按年和月分组并获得一个月的最小值和日期

postgresql - JSONB 列 : sort only content of arrays stored in column with mixed JSONB content

sql - 排序树数据结构

performance - 读取 RDS 只读副本的 IOPS 限制?

linux - 使用linux或python删除特殊字符

arrays - 矩阵遍历没有做最优路径