Предотвращение появления предупреждающего сообщения «Объект результата все еще используется» при использовании dbSendQuery для создания таблицы в базе данных - PullRequest
0 голосов
/ 22 февраля 2019

Справочная информация:

Я использую 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 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'))

1 Ответ

0 голосов
/ 22 февраля 2019

Даже если вы не получаете данные с предложением 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)
...