r - 防止来自 RStudio 的持久数据库连接

标签 r postgresql docker odbc rstudio

我有一个 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)

(替换 minSizemaxSize 的有意义的数字)。从这里,DBI::dbGetQuery(con, "select 1 as a")就像它是真实的一样工作。对我来说,真正的好处之一是当连接关闭时(出于任何原因,包括超时和我的 ssh 隧道发生故障),池连接会在下一次查询时自动重新连接。

大多数功能都按原样工作,但偶尔(我现在无法记忆或重现)我不得不做 library(pool);library(odbc)对于一些 DBI 功能。再次,不记得了,这可能是无关的。加载它们通常不是问题(如果可以避免的话,我只是不想附加太多的包)。

关于r - 防止来自 RStudio 的持久数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61548332/

相关文章:

python - PeeWee PostgreSQL 数据库创建 : does not exist

django - 在Docker中的服务之间共享动态文件的正确方法

docker - XDebug:Windows + Docker + PHPStorm

c# - 将 Blazor 应用程序部署到 Google App Engine

node.js - 如何将 Node Date()插入到postgresql时间戳列中?

r - 如何避免 uisng rbind 和 data.frame 的重复值?

r - 向ggplot图添加表格

r - 使用函数保存 ggplot

r - 使用 t.test 时出错 - 'x' 观察值不够

sql - 单个查询中多个日期范围的总和?