我在 Shiny 应用程序中使用 tbl_sql 对象来访问数据库表。我注意到有时 dplyr 会关闭此连接。这可能是因为垃圾收集器调用 db_disconnector。有什么办法可以阻止这种情况吗?我可以在 Shiny 的关闭事件上关闭连接。
最佳答案
看起来,如果你d <- src_mysql(...)
(我猜这就是您正在使用的后端,以及您如何连接到数据库?)那么垃圾收集器只会在 d
时运行。超出范围。也许是数据库通过超时连接来管理负载?
测试此功能的一种方法是编写自己的不会断开连接的包装器(而不是 src_mysql()
)
src_yoursql <-
function (dbname, host = NULL, port = 0L, user = "root", password = "",
...)
{
if (!requireNamespace("RMySQL", quietly = TRUE)) {
stop("RMySQL package required to connect to mysql/mariadb",
call. = FALSE)
}
con <- DBI::dbConnect(RMySQL::MySQL(), dbname = dbname, host = host,
port = port, username = user, password = password, ...)
info <- DBI::dbGetInfo(con)
src_sql("mysql", con, info = info)
}
d = src_yoursql(...)
手动关闭它
DBI::dbDisconnect(d$con)
关于r - 不要在 dplyr 中自动调用 db_disconnector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966405/