У меня проблемы такого же типа:
Получить все строки один раз:
df = dbFetch(res, n = -1)
=> он вернул только часть набора результатов и прекратил извлекать больше строк.
Использование цикла для выборки по кускам:
while (!dbHasCompleted(res)) {
chunk = dbFetch(res, n = 1000)
print(nrow(chunk))
df = rbind(df, chunk)
}
=> некоторое время он возвращал некоторые чанки, а затем запускает бесконечный цикл чанка нулевого размера (печатает «[1] 0
» навсегда), даже когда набор результатов не завершен для извлечения всех строк: dbHasCompleted(res) == FALSE
.
Затем я использовал эту стратегию:
Запустите запрос с "select count(1) from table where ...
", чтобы узнать размер результирующего набора. Добавлен 1 к числу счетчиков строк [row_count = as.integer(dbFetch(res, n = 1)) + 1
] и используйте это «count + 1» в качестве параметра n
, чтобы получить все строки сразу в следующем запросе. Кажется, до сих пор это было нормально ... но я знал об этой форме:
my_df = dbGetQuery(con, my_query)
Гораздо лучший метод, ошибок пока не найдено.