3

我在我的函数内部使用RPostgreSQLsqldf这样的:

MyFunction <- function(Connection) {

    options(sqldf.RPostgreSQL.user      = Connection[1], 
            sqldf.RPostgreSQL.password  = Connection[2],
            sqldf.RPostgreSQL.dbname    = Connection[3],
            sqldf.RPostgreSQL.host      = Connection[4], 
            sqldf.RPostgreSQL.port      = Connection[5])

    # ... some sqldf() stuff
}

如何测试该连接是否有效?

4

3 回答 3

4

您可以使用 . 检查现有连接是否有效isPostgresqlIdCurrent

conn <- dbConnect("RPgSQL", your_database_details)
isPostgresqlIdCurrent(conn)

对于测试新连接,我认为没有办法不尝试就知道连接是否有效。(在尝试连接之前,R 如何知道数据库存在并且可用?)

对于大多数分析目的,最好的方法是停止错误并修复登录详细信息。所以只需打电话dbConnect,不用担心额外的检查功能。

如果您正在创建某种需要优雅地处理错误的应用程序,那么一个简单的tryCatch包装器应该可以解决问题。

conn <- tryCatch(conn <- dbConnection(wherever), error = function(e) do_something)
于 2013-10-21T10:40:23.043 回答
3

我目前的设计使用tryCatch

Connection <- c('usr','secret','db','host','5432')

CheckDatabase <- function(Connection) {

  require(sqldf)
  require(RPostgreSQL)
    
  options(sqldf.RPostgreSQL.user      = Connection[1], 
          sqldf.RPostgreSQL.password  = Connection[2],
          sqldf.RPostgreSQL.dbname    = Connection[3],
          sqldf.RPostgreSQL.host      = Connection[4], 
          sqldf.RPostgreSQL.port      = Connection[5])
    
  out <- tryCatch(
  {
    sqldf("select TRUE;")
  },
  error=function(cond) {
    out <- FALSE
  }
  )    
  return(out)
}

if (!CheckDatabase(Connection)) {
  stop("Not valid PostgreSQL connection.") 
} else {
  message("PostgreSQL connection is valid.")
}
于 2013-10-21T13:40:22.770 回答
1

一种方法是简单地尝试执行代码,并使用信息丰富的错误消息捕获任何错误。查看文档tryCatch以了解有关其工作原理的详细信息。

以下博客文章介绍了基于异常的编程风格。

于 2013-10-21T09:52:49.100 回答