不要在 dplyr 中自动调用 db_disconnector

Don't call db_disconnector automatically in dplyr

我在我的 Shiny 应用程序中使用 tbl_sql 对象来访问数据库 table。我注意到有时 dplyr 会关闭此连接。可能是因为垃圾收集器调用 db_disconnector。有什么办法可以阻止这种情况吗?我可以在闪亮的关闭事件中关闭连接。

看起来,如果您 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)