我正在使用包pool
创建一个Shiny-app,它建立了与PostgreSQL-DB的连接。我不时会在没有应用程序运行的情况下获得错误信息。此外,当我在本地运行代码时,会出现相同的错误,有时会重复出现。
postgresqlQuickSQL中的警告(conn,statement,...):不能 在postgresqlExecStatement中创建执行:SELECT 1错误(conn, 声明,...):RS-DBI驱动程序:(无法运行语句:否 连接到服务器)
是否因为池创建了与数据库的连接,并且在一段时间后由于超时而导致数据库(或服务器)断开连接?
无论如何,在我的代码中没有任何地方我正在制作一个内部有SELECT 1
的SQL查询。
validateQuery()
)? 在我的ShinyApp中,我还有以下代码在应用程序关闭后结束池连接:
session$onSessionEnded(function() {
pool::poolClose(pool)
})
此外,在运行ShinyApp时,该应用程序运行良好&表现如预期。但是当我关闭应用程序时, RStudio经常崩溃,我必须重新打开它并重新加载项目。
答案 0 :(得分:3)
除了CRUD之外,你不想对服务器内的pool
做任何事情。您应该只在global.R中创建/销毁池。换句话说,池在应用程序启动时创建一次,并在所有用户之间共享。会话。它仅在不再需要时关闭,即应用程序关闭时。
<强> global.R 强>
pool <- dbPool(...)
onStop(function() {
poolClose(pool)
})