首页 > 解决方案 > 为什么我会收到此错误消息:postgresqlQuickSQL 中的警告

问题描述

我正在将包pool用于 Shiny-app,它建立了与我的 PostgreSQL-DB 的连接。在没有运行应用程序的情况下,我有时会收到以下错误消息。此外,当我在本地运行代码时,会出现相同的错误,有时还会重复出现。

postgresqlQuickSQL(conn,statement,...)中的警告:无法创建执行:SELECT 1 postgresqlExecStatement(conn,statement,...)中的错误:RS-DBI驱动程序:(无法运行语句:没有连接到服务器)

是因为池创建了与数据库的连接,并且在一段时间后数据库(或服务器)由于超时而断开连接?

无论如何,在我的代码中,我没有在SELECT 1里面做一个 SQL 查询。

在我的 ShinyApp 中,我还有以下代码在应用程序关闭后结束池连接:

  session$onSessionEnded(function() {
    pool::poolClose(pool)
  })

此外,在运行 ShinyApp 时,该应用程序运行良好且行为符合预期。但是当我关闭应用程序时,RStudio 经常崩溃,我必须重新打开它并重新加载项目。

标签: rpostgresqlshinypoolr-dbi

解决方案


除了 CRUD 之外,您不想对pool内部 server.R 做任何事情。您应该只在 global.R 中创建/销毁池。换句话说,池在应用程序启动时创建一次,并在所有用户的会话之间共享。它仅在不再需要时关闭,即应用程序关闭时。

全局.R

pool <- dbPool(...)

onStop(function() {
  poolClose(pool)
})

推荐阅读