背景:
我使用dbplyr
和dplyr
从数据库中提取数据,然后使用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 connectioncon = DBI::dbConnect(<connection stuff here>)
# connect to table and databasetransactions = tbl(con,in_schema(“DATABASE_NAME”,”TABLE_NAME”))
# build query stringquery_string = “SELECT * FROM some_table”
# drop current version of tableDBI::dbSendQuery(con,paste('DROP TABLE MY_DB.MY_TABLE'))
# build new version of tableDBI::dbSendQuery(con,paste('CREATE TABLE PABLE MY_DB.MY_TABLE AS (‘,query_string,’) WITH DATA'))
最佳答案
即使您没有使用SELECT子句检索内容,DBI仍会在每次调用DBI::dbSendQuery()
之后分配一个结果集。
尝试在DBI::dbClearResult()
调用之间使用DBI::dbSendQuery()
尝试一下。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/