I am testing psqlodbc in our school.I wrote the following code:
...
rtcode=SQLExecDirect(hstmt,"select * from pg_largeobject",SQL_NTS);
if((rtcode!=SQL_SUCCESS) && (rtcode!=SQL_SUCCESS_WITH_INFO)){
printf("SQLExecDirect Failed!\n");
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,env);
exit(1);
}
printf("|loid\t|pageno\t|data\t|\n");
for(i=0;i<100;i++){
SQLFetch(hstmt);
printf("|%d\t|%d\t|%s\t|\n",loid,pageno,buffer);
}
...
There are 1532240 tuples in pg_largeobject, and their size is about 3GB. But where I run this code, the client's main memory is exhausted. It seems that the client try to get all the tuples before it fetches the first 100.
I think the client should get a small part first. If it need more tuples, it get anothor part and discard the first part. When I test psqlodbc in Windows, it seems to work well.
What's wrong? How can I fixed it?
Any reply will be appreciated!
Looking forward to your help!