r - 使用 dbSendQuery 在数据库上创建表时避免警告消息 “There is a result object still in use”

标签 r database dplyr teradata dbplyr

背景:

我使用 dbplyrdplyr从数据库中提取数据,然后我使用命令 dbSendQuery()构建我的表。


问题:

建表后,如果我运行另一个命令,我会收到以下警告:

Warning messages: 1. In new_result(connection@ptr, statement): Cancelling previous query 2. In connection_release(conn@ptr) :
 There is a result object still in use. The connection will be automatically released when it is closed.


问题:

因为我没有要获取的结果(我正在发送构建表的命令),所以我不确定如何避免此警告。目前我在建表后断开连接,错误消失了。我能做些什么来避免这个警告吗?

目前一切正常,我只是收到这个警告。我只是想避免它,因为我认为我应该在构建表格后清除一些东西


代码示例

# establish connection con = DBI::dbConnect(<connection stuff here>)

# connect to table and database transactions = tbl(con,in_schema(“DATABASE_NAME”,”TABLE_NAME”))

# build query string query_string = “SELECT * FROM some_table”

# drop current version of table DBI::dbSendQuery(con,paste('DROP TABLE MY_DB.MY_TABLE'))

# build new version of table DBI::dbSendQuery(con,paste('CREATE TABLE PABLE MY_DB.MY_TABLE AS (‘,query_string,’) WITH DATA'))

最佳答案

即使您没有使用 SELECT 子句检索内容,DBI 仍会在每次调用 DBI::dbSendQuery() 后分配一个结果集。 在 DBI::dbSendQuery() 调用之间尝试使用 DBI::dbClearResult()

DBI::dbClearResult() 做:

Clear A Result Set
Frees all resources (local and remote) associated with a 
result set. In some cases (e.g., very large result sets) this 
can be a critical step to avoid exhausting resources 
(memory, file descriptors, etc.)

手册页的示例应该给出应该如何调用该函数的提示:

con <- dbConnect(RSQLite::SQLite(), ":memory:")

rs <- dbSendQuery(con, "SELECT 1")
print(dbFetch(rs))

dbClearResult(rs)
dbDisconnect(con)

关于r - 使用 dbSendQuery 在数据库上创建表时避免警告消息 “There is a result object still in use”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54817011/

相关文章:

r - 在ggplot中生成成对堆积条形图(仅在某些变量上使用position_dodge)

r - 在二进制数据帧中获得成对比例的一致性

r - 计算r中两个日期之间的天数

返回带小数位的值中第一个小于 5 的数字的位置

python - rPython 和 __future__ 导入

database - Laravel 5 - 如何为同一个 laravel 项目设置超过 1 个数据库凭据(如果可能)?

java - 如何在 RecyclerView 中共享 Firebase 中的图像?

database - Heroku POSTGRESQL - "Too many connections for role"错误

r - 在 dplyr 链中使用 if_else/summarize 添加数千列?

r - 如何折叠频率表的行以将其计数添加到新列中?