Размер буфера QSqlQuery - PullRequest
       4

Размер буфера QSqlQuery

2 голосов
/ 09 февраля 2011

У меня есть большая таблица в PostgresDB (55 ГБ).Я хочу отсканировать его в C ++ с помощью QT, подвести итог и отправить обратно в БД.Насколько я понимаю, по умолчанию QSqlQuery передает все данные в основную память.Можно ли указать явный размер буфера для объекта?Можно ли также сказать QT / Postgres, что я хотел бы получить ответ постепенно, т. Е. Не после того, как все данные вычислены и только затем отправлены в программу C ++?

Используемый мной кодследующее:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("server");
db.setDatabaseName("db");
db.setUserName("user");
db.setPassword("pass");
bool ok = db.open();

QSqlQuery query;
query.setForwardOnly(true);
query.prepare("select attributes veryLargeTable");
while (query.next()) {
    int i = query.value(0).toInt(); // and work with the data
}

Я недавно видел ответ в сети, но я часами искал ответ безуспешно.

1 Ответ

1 голос
/ 11 февраля 2011

Я бы разделил свой выбор (конечно, в транзакции).Сначала определите iMaxLines размер выбора, например:

SELECT COUNT(*) FROM veryLargeTable

Если я сейчас хочу прочитать только 1000 строк объявления, я могу сделать что-то подобноеЭто может быть итерация от 0, 1000, 2000, ..., iMaxLines-1000

С уважением, Ларс

...