防止来自 RStudio 的持久数据库连接
Prevent Persistent Database Connections from RStudio
我有一个 Redshift 数据库,并且我 运行 RStudio 位于 Docker 从 Jupyter Notebooks 证实的图像中。
我添加了 ODBC 驱动程序并安装了 odbc
包作为启动 Docker 实例的命令的一部分。
我担心的是我最终与数据库建立了太多打开的连接。
我担心有很多长期存在的连接,因为它们可能会锁定我的表。我查看了 odbc 和 RPostgreSQL 的文档,但没有看到任何关于超时或清除所有连接的方法。
如何防止从 RStudio 到 PostgreSQL 的长期连接过多?
我的偏好和解决方案是使用 pool
包来管理连接。我不需要大量的 "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 隧道中断),池连接会在下一个查询时自动重新连接。
大多数功能按原样工作,但偶尔(我现在无法回忆或重现)我不得不为某些 DBI 功能做 library(pool);library(odbc)
。再一次,不记得了,它可能是不相关的。加载它们通常不是问题(如果可以避免的话,我只是不想附加太多包)。
我有一个 Redshift 数据库,并且我 运行 RStudio 位于 Docker 从 Jupyter Notebooks 证实的图像中。
我添加了 ODBC 驱动程序并安装了 odbc
包作为启动 Docker 实例的命令的一部分。
我担心的是我最终与数据库建立了太多打开的连接。
我担心有很多长期存在的连接,因为它们可能会锁定我的表。我查看了 odbc 和 RPostgreSQL 的文档,但没有看到任何关于超时或清除所有连接的方法。
如何防止从 RStudio 到 PostgreSQL 的长期连接过多?
我的偏好和解决方案是使用 pool
包来管理连接。我不需要大量的 "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 隧道中断),池连接会在下一个查询时自动重新连接。
大多数功能按原样工作,但偶尔(我现在无法回忆或重现)我不得不为某些 DBI 功能做 library(pool);library(odbc)
。再一次,不记得了,它可能是不相关的。加载它们通常不是问题(如果可以避免的话,我只是不想附加太多包)。