我尝试使用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放入列表中确实有很大帮助。
答案 0 :(得分:5)
使用dbSendQuery
发送插入语句。在这种情况下,tryCatch将捕获异常:
tryCatch({
dbSendQuery(con, "insert into wrongtable values(1, 2, 3)")
},
error = function(e) print(e)
)
使用dbGetQuery(我不知道它失败的原因)有一个解决方法 -
致电postgresqlExecStatement
和postgresqlFetch
而不是dbGetQuery
:
tryCatch({
res <- postgresqlExecStatement(con, "select * from thereisnotablewiththisname")
postgresqlFetch(res)
},
error = function(e) print(e),
warning = function(w) print(w)
)