我在PostgresDB中有一个大表(55GB)。我想用CT在C ++中扫描它,汇总结果,并将其发送回数据库。据我所知,默认情况下,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
}
我最近在网上看到了一个答案,但我花了好几个小时再次寻找答案而没有任何成功。
答案 0 :(得分:1)
我会分开我的选择(当然是在交易中)。首先确定选择的iMaxLines
大小:
SELECT COUNT(*) FROM veryLargeTable
如果我现在只想阅读1000行广告,我可以做这样的事情
SELECT attribute FROM veryLargeTable LIMIT 1000 OFFSET X
其中X
可以从0,1000,2000,...,iMaxLines-1000
问候,Lars