Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql lib/pq postgres驱动程序中的连接泄漏_Sql_Postgresql_Go - Fatal编程技术网

Sql lib/pq postgres驱动程序中的连接泄漏

Sql lib/pq postgres驱动程序中的连接泄漏,sql,postgresql,go,Sql,Postgresql,Go,假设db的类型为*sql.db uging lib/pq driver,则以下代码会导致连接泄漏: 行,错误:=db.Query 从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 发现:=假 行,下一行{ 找到=真 打破 } 反复调用此代码会增加打开的连接数,直到耗尽: 从pg_stat_数据库中选择sumnumbackends; // 5 // 6 // 7 // ... // 80 如何修复它?您编写的代码有几个问题。避

假设db的类型为*sql.db uging lib/pq driver,则以下代码会导致连接泄漏:

行,错误:=db.Query 从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 发现:=假 行,下一行{ 找到=真 打破 } 反复调用此代码会增加打开的连接数,直到耗尽:

从pg_stat_数据库中选择sumnumbackends; // 5 // 6 // 7 // ... // 80
如何修复它?

您编写的代码有几个问题。避免连接泄漏问题的直接答案是关闭行迭代器。调用它的正常方式是在DEREF语句中:

行,错误:=db.Query 从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 推迟行。关闭 发现:=假 行,下一行{ 找到=真 打破 } 其次,由于您所关心的只是一个结果,因此根本没有理由获取多行结果集,这也将隐式地解决连接泄漏问题。有关检查Postgres是否存在的最快方法的讨论,请参阅。如果我们在这里进行调整:

行,错误:=db.QueryRow 选择Exists从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 瓦尔发现了布尔 如果错误:=行扫描并找到;呃!=零{ 返回nil,fmt.errorf返回扫描结果:%w,错误 }
您编写的代码有几个问题。避免连接泄漏问题的直接答案是关闭行迭代器。调用它的正常方式是在DEREF语句中:

行,错误:=db.Query 从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 推迟行。关闭 发现:=假 行,下一行{ 找到=真 打破 } 其次,由于您所关心的只是一个结果,因此根本没有理由获取多行结果集,这也将隐式地解决连接泄漏问题。有关检查Postgres是否存在的最快方法的讨论,请参阅。如果我们在这里进行调整:

行,错误:=db.QueryRow 选择Exists从id=1的项目中选择1, 事情 如果出错!=零{ 返回nil,fmt。error无法选择对象%d:%w,对象,错误 } 瓦尔发现了布尔 如果错误:=行扫描并找到;呃!=零{ 返回nil,fmt.errorf返回扫描结果:%w,错误 }