24 messages in org.postgresql.pgsql-jdbcRe: Limit vs setMaxRows issue
FromSent OnAttachments
Sebastiaan van ErkJun 21, 2006 2:11 am 
Dave CramerJun 21, 2006 7:56 am 
Sebastiaan van ErkJun 21, 2006 8:48 am 
Kris JurkaJun 21, 2006 8:59 am 
A.M.Jun 21, 2006 9:09 am 
Tom LaneJun 21, 2006 9:46 am 
Oliver JowettJun 21, 2006 3:52 pm 
Sebastiaan van ErkJun 22, 2006 1:35 am 
Mark LewisJun 22, 2006 9:15 am 
David WallJun 22, 2006 9:36 am 
Sebastiaan van ErkJun 22, 2006 1:13 pm 
Marc HerbertJul 10, 2006 1:50 am 
Marc HerbertJul 10, 2006 1:59 am 
Marc HerbertJul 10, 2006 2:05 am 
Oliver JowettJul 10, 2006 11:32 pm 
Oliver JowettJul 10, 2006 11:37 pm 
Marc HerbertJul 11, 2006 2:48 am 
Marc HerbertJul 11, 2006 3:00 am 
Oliver JowettJul 11, 2006 3:45 am 
Marc HerbertJul 11, 2006 5:14 am 
Oliver JowettJul 11, 2006 10:01 pm 
Marc HerbertJul 12, 2006 3:22 am 
Markus SchaberJul 12, 2006 3:59 am 
Marc HerbertJul 20, 2006 11:52 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: Limit vs setMaxRows issueActions...
From:David Wall (d.w@computer.org)
Date:Jun 22, 2006 9:36:10 am
List:org.postgresql.pgsql-jdbc

What about the setFetchSize method? My impression is that using setFetchSize along with setMaxRows would do the trick on the back end as it resulted in the cursor mechanism that didn't retrieve the complete result set. Is that not the case in PG 8.1 (at least with the few caveats listed at http://jdbc.postgresql.org/documentation/81/query.html)?

David

It's not a bug. setMaxRows() is essentially a hint, there's certainly no requirement that the driver will go off and add LIMIT clauses to your query, the minimal implementation won't change query execution at all and will just limit rows coming back out of the ResultSet.. It might be nice to add LIMIT but that would require the driver to parse query strings which gets very complicated and isn't going to catch all the cases anyway. You'll be getting at least some improvement with the existing driver because the whole resultset isn't being transferred and processed, even if the plan is still assuming you will grab all the data.

If your queries need a LIMIT clause to get decent performance then your safest bet is to add a LIMIT clause yourself. You can keep the setMaxRows() as well if you like..