在将 sqlx 与 pgx 一起使用时,我经常会收到此错误,我相信这是我的配置错误和我没有掌握的 db 概念:
error: 'write tcp [redacted-ip]:[redacted-port]->[redacted-ip]:[redacted-port]: write: connection timed out
尝试从数据库读取时会发生这种情况。我在启动阶段初始化 sqlx:
package main
import (
_ "github.com/jackc/pgx/stdlib"
"github.com/jmoiron/sqlx"
)
//NewDB attempts to connect to the DB
func NewDB(connectionString string) (*sqlx.DB, error) {
db, err := sqlx.Connect("pgx", connectionString)
if err != nil {
return nil, err
}
return db, nil
}
任何负责与数据库交互的结构都可以访问这个指针。他们中的大多数人使用Select
or Get
,我理解那些自己返回到池的连接。有两个函数使用Exec
,它们只在函数结束时返回结果和错误。
其他注意事项
- 我的 Postgres 数据库支持 100
max_connections
- 在出现此错误时,我只显示了一些活动连接
- 我没有使用
SetMaxIdleConnections
或SetMaxOpenConnections
- 刷新页面并再次触发请求始终有效
关于这里可能发生的事情的任何提示?
编辑:我没有提到该服务器位于 compose.io 上,而后者又托管在 AWS 上。AWS是否有可能将这些连接变成僵尸,因为它们已经打开了很长时间,并且在一个一个尝试它们失败后发生超时?