2011-02-09 2 views
1

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

код я использую следующее:

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 
} 

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

ответ

0

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

SELECT COUNT(*) FROM veryLargeTable 

Если я теперь хочу прочитать только 1000 линий объявление один раз, я могу сделать что-нибудь вроде этого

SELECT attribute FROM veryLargeTable LIMIT 1000 OFFSET X 

Где X это может быть повторяется для от 0, 1000 , 2000, ..., iMaxLines-1000

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

Смежные вопросы