Postgresql 对不起,已经有太多客户了
我收到Postgresql 对不起,已经有太多客户了,postgresql,go,Postgresql,Go,我收到pq:抱歉,当我多次调用GetMessages()时,已经有太多客户端出现了错误 请查找更新的代码: main()code func main() { dbConn, err := InitDB() if err != nil { Log.Error("Connection Error: ", err.Error()) return } defer dbConn.Close() go run() var input string fmt.Scan
pq:抱歉,当我多次调用GetMessages()
时,已经有太多客户端出现了错误
请查找更新的代码:
main()
code
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
}
我检查了答案,并使用了扫描
,但仍然不起作用
更新
问题是在另一个功能中。我使用的是db.Query
,没有关闭返回的行
对象,并且反复调用该函数。我已经更新了我的代码;使用了db.Exec
而不是db.Query
,它现在可以工作了。非常感谢您的回答。:) 我觉得你的GetMessages
代码很好。您在何处执行连接代码?执行了多少次?我只从另一个函数调用了一次连接db
是*sql.db
类型的全局变量。。。尽管与问题无关,其中id=1
表明您正在选择一行,如果是这种情况,我建议您使用db.QueryRow
而不是db.Query
。()检查postgres服务器的max_connection
设置。()还可以使用pg_stat_活动中的SELECT COUNT(*)检查现有连接的数量代码>和/或尝试使用SELECT*FROM pg_stat_activity检查连接代码>在你的go应用程序执行期间。我想知道连接的完整功能是什么样子的。因为你有一个延迟连接在它里面,所以如果这个函数返回,你的连接就会被关闭,但是如果它没有返回,我想知道它是否会在某个地方的循环中打开越来越多的连接