Как исправить сообщение с предупреждением «Закрытие открытого набора результатов, отмена предыдущего запроса» при запросе базы данных PostgreSQL в R? - PullRequest
0 голосов
/ 15 апреля 2020

Ниже приведен фрагмент моего кода, который я использую в R для извлечения идентификаторов из базы данных PostgreSQL. Когда я запускаю функцию, я получаю следующее предупреждение от R:

In result_create (conn@ptr, оператор): закрытие открытого набора результатов, отмена предыдущего запроса

Как избежать появления этого предупреждающего сообщения, не используя options(warn=-1) в начале моего кода, подавляя предупреждение вместо

con <- dbConnect(RPostgres::Postgres(),
                 user = "postgres",
                 dbname  = "DataBaseName",
                 password  = "123456",
                 port  = 5431)


get_id <- function(connection, table){

  query <- toString(paste("SELECT id FROM ", table, sep = ""))
  data_extract_query <- dbSendQuery(connection, query)
  data_extract <- dbFetch(data_extract_query)
  return(data_extract)
}


get_id(con, "users") 

1 Ответ

0 голосов
/ 15 апреля 2020

Я нашел способ решения проблемы.

Я нашел тему на GitHub для RSQLite https://github.com/r-dbi/RSQLite/issues/143. В этой теме они явно установили n = -1 в функции dbFetch().

Это, похоже, решило мою проблему, и предупреждающее сообщение не появилось снова при редактировании кода, подобного следующему:

data_extract <- dbFetch(data_extract_query, n = -1)

Значение n - это количество строк, которое должен вернуть запрос. Установив для этого значение -1, будут получены все строки. По умолчанию он установлен на n = -1, но по какой-то причине в этой сборке R (3.6.3) все равно будет отображаться предупреждение.

Позвонив по ?dbFetch в R, вы можете увидеть больше информации о это. Я включил фрагмент страницы R-справки:

Использование

dbFetch(res, n = -1, ...)

fetch(res, n = -1, ...)

Аргументы

res Объект, наследуемый от DBIResult, созданный функцией dbSendQuery ().

n максимальное количество записей, извлекаемых за выборку. Используйте n = -1 или n = Inf, чтобы получить все ожидающие записи. Некоторые реализации могут распознавать другие специальные значения.

... Другие аргументы, передаваемые в методы.

...