【问题标题】:Why am I getting this error-msg: Warning in postgresqlQuickSQL为什么我会收到此错误消息:postgresql Quick SQL 中的警告
【发布时间】:2018-05-24 11:15:37
【问题描述】:

我正在将包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 经常崩溃,我必须重新打开它并重新加载项目。

  • 这是为什么呢?
  • 如何找出导致崩溃的原因?

【问题讨论】:

    标签: r postgresql shiny pool r-dbi


    【解决方案1】:

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

    global.R

    pool <- dbPool(...)
    
    onStop(function() {
      poolClose(pool)
    })
    

    【讨论】:

    • 我在 global.R 文件中创建池。在服务器内部,我只是在读取和写入数据库。但你是对的,我试图破坏服务器内的池。我将尝试使用 onStop 函数。谢谢你的回答。
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多