我在我的函数中使用RPostgreSQL
和sqldf
,如下所示:
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
}
如何测试该连接是否有效?
答案 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帖子介绍了基于异常的编程风格。