gpt4 book ai didi

RPostgreSQL 无法关闭连接

转载 作者:行者123 更新时间:2023-12-04 12:11:42 26 4
gpt4 key购买 nike

我有一个 Shiny 的应用程序,它使用 RPostgreSQL 连接到数据库.在应用程序结束时,连接关闭,驱动程序应该被卸载,但我收到一个错误,警告我连接没有关闭。

代码如下所示:

 # in the app.R file, but not in the server function:
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = "database1",
host = "localhost", port = 5432,
user = "user", password = "pw")

# in the server function:
foo <- dbGetQuery(con, "SELECT * from table1")

# at the end of the server function to disconnect when the app is closed:
session$onSessionEnded(function(){
dbDisconnect(con)
dbUnloadDriver(drv)
})

但是,我收到错误消息: Error in postgresqlCloseDriver(drv, ...): RS-DBI driver: (There are opened connections -- close them first)这与命令 dbUnloadDriver(drv) 一起显示.

当我手动查找与 dbListConnections() 的开放连接时我得到一个列表,其中包含多达 16 个与数据库的打开连接。注意,我只使用 dbGetQuery从不 dbSendQuery以避免必须关闭连接。

有任何想法吗?

最佳答案

像这样构造你的代码:

function()
{
con <- dbConnect("PostgreSQL") # + other params
on.exit(dbDisconnect(con))

dbGetQuery("SELECT * FROM wherever") # or whatever you want to do
}

通过使用 on.exit ,无论是否发生错误,连接都保证关闭。

另见 How and when should I use on.exit?

如果需要,您可以使用以下命令卸载驱动程序:
on.exit(dbUnloadDriver(drv), add = TRUE)

我怀疑这可能会提供更差的性能,因为每次连接到数据库时都会卸载和重新加载驱动程序。如果您对此感到担心,请在您的使用条件下进行测试。

关于RPostgreSQL 无法关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com