我有一个 Redshift 数据库,我在 Jupyter Notebooks 证实的 Docker 镜像中运行 RStudio。
我添加了 ODBC 驱动程序并安装了 odbc
打包作为启动 Docker 实例的命令的一部分。
我担心的是我最终与数据库有太多打开的连接。
我担心有许多长期存在的连接,因为它们可能会锁定我的表。我查看了 odbc 和 RPostgreSQL 的文档,但没有看到任何关于超时或清除所有连接的方法。
如何防止从 RStudio 到 PostgreSQL 的长期连接过多?
最佳答案
我的偏好和解决方案是使用 pool
用于管理连接的包。我不需要有一个大的连接“池”来受益于它的一项功能:超时重新连接。
使用非常简单。与大多数其他 DBI
类似司机,你不需要library(pool)
, 只需在打开时引用它。
如果您最初的公开电话是:
library(DBI)
con <- dbConnect(odbc::odbc(), driver = "ODBC Driver 17 for SQL Server",
server = "somehost,1433", uid = "someuser", pwd = "secret",
database = "umptysquat")
然后改为使用:
con <- pool::dbPool(odbc::odbc(), driver = "ODBC Driver 17 for SQL Server",
server = "somehost,1433", uid = "someuser", pwd = "secret",
database = "umptysquat", minSize = 1, maxSize = 5)
(替换
minSize
和 maxSize
的有意义的数字)。从这里,DBI::dbGetQuery(con, "select 1 as a")
就像它是真实的一样工作。对我来说,真正的好处之一是当连接关闭时(出于任何原因,包括超时和我的 ssh 隧道发生故障),池连接会在下一次查询时自动重新连接。大多数功能都按原样工作,但偶尔(我现在无法记忆或重现)我不得不做
library(pool);library(odbc)
对于一些 DBI 功能。再次,不记得了,这可能是无关的。加载它们通常不是问题(如果可以避免的话,我只是不想附加太多的包)。
关于r - 防止来自 RStudio 的持久数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61548332/