登录
首页 >  Golang >  Go问答

已达到最大客户容量,请谅解

来源:stackoverflow

时间:2024-03-02 23:36:27 494浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《已达到最大客户容量,请谅解》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

当我多次调用 getmessages() 时,我收到 pq: 抱歉,太多客户端已经 错误。

请查找更新后的代码:

main()代码

func main() {
  dbconn, err := initdb()
  if err != nil {
    log.error("connection error: ", err.error())
    return
  }
  defer dbconn.close()
  go run()
  var input string
  fmt.scanln(&input)
}

数据库连接代码为:

func initdb()(*sql.db, error) {
  connectionstring := fmt.sprintf("user=%v password='%v' dbname=%v sslmode=disable", user, password, database)
  db, err = sql.open(driver, connectionstring)
  return db, err
}

run goroutine:

func run() {
  for {
    messages, err := getmessages()
    if err != nil {
      log.error("connection error: ", err.error())
      return
    }
    log.info(messages)
  }
}

getmessages()函数代码:

func GetMessages() (messages []string, err error) {
    rows, err := db.Query(`SELECT message1, message2, message3, message4, message5,
            message6, message7, message8, message9, message10, message11, message12, message13, 
            message14, message15, message16, message17, message18, message19, message20, message21,
            message22, message23, message24, message25, message26, message27, message28, message29,
            message30, message31, message32, message33, message34, message35, message36, message37,
            message38, message39, message40, message41, message42, message43, message44, message45,
            message46, message47, message48 FROM table1 WHERE id=1`)

    if err != nil {
        Log.Error("Query error", err)
        return messages, err
    }

    var pointers []interface{}
    defer rows.Close()

    for rows.Next() {
        pointers = make([]interface{}, 48)
        messages = make([]string, 48)
        for i, _ := range pointers {
            pointers[i] = &messages[i]
        }
        err = rows.Scan(pointers...)
        if err != nil {
            Log.Error("Failed to scan row", err)
            return messages, err
        }
    }

    return messages, nil
}

我检查了这个答案,我已经使用了 scan 但它仍然不起作用

更新

问题出在另一个函数中。我使用 db.query 而不关闭返回的 rows 对象并重复调用该函数。我已经更新了我的代码;使用 db.exec 而不是 db.query 并且它现在正在工作。非常感谢@mkopriva 的回答。 :)


解决方案


尝试设置 SetMaxOpenConns。默认值为 0(无限制)。这可能是导致问题的原因。如果您还有 SetConnMaxLifetime,将会有所帮助;否则,Postgres 将开始保持连接更长时间,您会注意到内存使用量增加。

终于介绍完啦!小伙伴们,这篇关于《已达到最大客户容量,请谅解》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>