【发布时间】:2022-01-26 05:11:13
【问题描述】:
我正在尝试构建一个闪亮的应用程序,它将使用 DBI 连接到一个不稳定的 PostgreSQL 数据库。当数据库稳定时它可以正常工作,但只要数据库变慢或暂时停止,就会出现 Whitelabel Error。如何配置我的应用程序,使其在抛出错误之前继续尝试连接多次?示例代码如下:
library(shiny)
library(DBI)
con <- dbConnect(
RPostgres::Postgres(),
host = "myip",
port = "myport",
dbname = "mydb",
user = "user",
password = "password"
)
ui <- fluidPage(
tableOutput("mytable")
)
server <- function(input, output, session){
output$mytable <- renderTable(
dbGetQuery(
con,
"select * from mytable;"
)
)
}
shinyApp(ui, server)
【问题讨论】:
-
看看
?tryCatch -
我应该只使用带有 dbConnect 的 tryCatch,还是每个 dbGetQuery?
-
我认为您的问题的答案是:both,并使用单独的恢复逻辑。也就是说,如果
dbConnect失败,那么我将推断您的大多数应用程序不再能够完成其工作。如果特定查询失败,可能是由于(1)您更改了查询并且没有充分测试它;或 (2) 用户输入了不适当的输入(即在表单字段中),您可能应该在尝试dbGetQuery之前进行一些错误清理。 (这两个原因都是由于对应用程序的测试不足。)可能 (3) 数据库有其他故障,超出您的控制范围。