Re: [INTERFACES] Front end memory consumption in SELECT
От | Tom Lane |
---|---|
Тема | Re: [INTERFACES] Front end memory consumption in SELECT |
Дата | |
Msg-id | 6505.943079195@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Front end memory consumption in SELECT (Douglas Thomson <dougt@mugc.cc.monash.edu.au>) |
Ответы |
Re: [INTERFACES] Front end memory consumption in SELECT
|
Список | pgsql-interfaces |
Douglas Thomson <dougt@mugc.cc.monash.edu.au> writes: > However, judging by the memory consumption of my front-end process, > it would seem that the SELECT is loading the entire table into memory > before I even fetch the first row! Can anyone confirm that this is in > fact what goes on? libpq handles SELECTs that way. You should consider DECLARE CURSOR and FETCH if you need to retrieve a large query result in chunks. It was probably bad design for libpq to offer random access to query results --- I'm sure there are few applications that really care, and the memory-consumption problem is a very real one for many apps. But I see no way to fix it without fundamental changes to libpq's API, and it's not clear it's worth that kind of pain. Maybe there will be a deliberately-incompatible libpq Mark II someday ... or maybe we'll switch to a whole new client interface like CORBA. > If so, is there any way to avoid it? The obvious solution would seem > to be to use LIMIT and OFFSET to get just a few thousand rows at a > time, but will that suffer from a time overhead while the backend > skips over millions of rows to get to the ones it needs?? Yes. See the CURSOR stuff instead. regards, tom lane
В списке pgsql-interfaces по дате отправления: