【发布时间】:2018-10-27 11:58:30
【问题描述】:
我正在使用 RJDBC 查询 R 中的数据库。查询是根据从文件中读取的数据构建的。这些查询可能会变得很长,并且可能包含不存在的列(导致错误)。
下面是一个简化的例子,它将文件作为输入,并运行从文件生成的 2 个查询。
表列 饮料费用 喝糖 饮料量 食物成本SELECT column, cost, sugar FROM drinks;
SELECT cost FROM food;
由于这些查询可能会变得很长,因此数据库中的任何错误通常会在有用信息之前被截断。我当前的错误之一是:
ERROR [2018-05-16 16:53:07] 处理 DAR-2018-00008 原始错误消息的表 data_baseline_biosamples 时出错:.verify.JDBC.result(r, "Unable to retrieve JDBC result set for " , : 无法检索 SELECT ed.studyid, {very long list of columns} 的 JDBC 结果集 ,ct.nmr_xl_vldl_pl,ct.nmr_xl_
由于数据库错误包括关键信息之前的整个查询,截断删除了对解决问题有价值的信息。
在这种情况下,错误消息可能以如下内容结尾:
(第 1 行,“littlefeltfangs”拥有的表“data_biosamples”不包含“sample_source”列。)
如何记录数据库发送的完整错误消息或提取该消息的最后部分?
我在 tryCatch 中捕获错误并使用 futile.logger 将错误传递到日志文件中。截断后的总错误长度为 8219 个字符,其中 8190 个似乎来自数据库。
【问题讨论】:
-
由于 R 似乎有一个“硬编码”的最大长度,您可以在 SQL 代码中捕获错误,提取错误消息并返回 e。 G。作为一个单元格的结果集。您使用的是哪个数据库?
-
Ingres 超出了我的技能,但
Inquire_SQL似乎传递了最后执行的 SQL 语句的错误消息(docs.actian.com/ingres/11.0/index.html#page/… 和 docs.actian.com/ingres/11.0/index.html#page/…),示例代码可以在这里找到:docs.actian.com/ingres/11.0/index.html#page/…
标签: r error-handling rjdbc