gpt4 book ai didi

postgresql - pq : sorry, 已经有太多客户端

转载 作者:IT王子 更新时间:2023-10-29 01:46:48 27 4
gpt4 key购买 nike

当我多次调用 GetMessages() 时,出现了 pq: sorry, too many clients already 错误。

请找到更新后的代码:

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
}

运行协程:

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
}

我检查了this answer 并且我已经使用了 scan 但它仍然无法正常工作

更新

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

最佳答案

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

关于postgresql - pq : sorry, 已经有太多客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53885511/

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