如何在带有PostgreSQL的tryCatch中使用dbGetQuery?

时间:2015-12-17 10:52:46

标签: r postgresql

我尝试使用tryCatch从R查询我的PostgreSQL数据库。 基本上查询工作,但我无法设法捕获错误并对它们作出反应。这是一个例子

insert_rows <- function(dframe,con){

out <- list()
for(i in 1:nrow(dframe)){
query <- .... some insert statement
tryCatch({dbGetQuery(con,query)},error=function(e) print("caught"))
}

}

当我创建错误时,例如通过输入重复记录到唯一的PK,我确实看到了PostgreSQL错误和警告,但它是RPostgreSQL的标准打印输出。我在其他环境中使用了tryCatch,它总是以这种方式工作。我使用了dbGetQuery很多,但我不能让它们一起工作。此外,将tryCatch放入列表中确实有很大帮助。

1 个答案:

答案 0 :(得分:5)

使用dbSendQuery发送插入语句。在这种情况下,tryCatch将捕获异常:

tryCatch({
  dbSendQuery(con, "insert into wrongtable values(1, 2, 3)")
},
error = function(e) print(e)
)

使用dbGetQuery(我不知道它失败的原因)有一个解决方法 - 致电postgresqlExecStatementpostgresqlFetch而不是dbGetQuery

tryCatch({
  res <- postgresqlExecStatement(con, "select * from thereisnotablewiththisname")
  postgresqlFetch(res)
},
error = function(e) print(e),
warning = function(w) print(w)
)