首先,
*sql.DB不是连接而是连接池,它将打开所需数量的连接以及postgres服务器允许的数量。仅当池中没有空闲的可用连接时,它才会打开新连接。
因此,问题在于数据库打开的连接没有被释放,为什么?因为您使用时
QueryRow未调用
Scan返回
*Row值。
引擎盖下
*Row有一个
*Rows实例,该实例可以访问其自己的连接,并且该连接在
Scan被调用时会自动释放。如果
Scan未调用,则连接不会释放,这会导致
DB池在下一次调用时打开新连接
QueryRow。因此,由于您不释放任何连接,因此请
DB继续打开新的连接,直到达到postgres设置所指定的限制,然后下一次调用
QueryRow挂起,因为它等待连接变为空闲状态。
因此,
Exec如果您不关心输出,则需要使用,或者需要调用
Scanreturn
*Row。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)