检查连接是否有效

时间:2013-10-21 08:11:47

标签: r sqldf rpostgresql

我在我的函数中使用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
}

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

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

conn <- tryCatch(conn <- dbConnection(wherever), error = function(e) do_something)

答案 1 :(得分: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.")
}

答案 2 :(得分:1)

一种方法是简单地尝试执行代码,并通过一个很好的信息性错误消息捕获任何错误。查看tryCatch的文档,了解有关其工作原理的详细信息。

following blog帖子介绍了基于异常的编程风格。