RE: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)

Поиск
Список
Период
Сортировка
От Hiroshi Inoue
Тема RE: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)
Дата
Msg-id 000f01bf2a6b$fc1eafc0$2801007e@cadzone.tpf.co.jp
обсуждение исходный текст
Ответ на Re: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)  (Hiroshi Inoue <Inoue@tpf.co.jp>)
Ответы Re: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)
Список pgsql-sql
> >
> > > I knew the way to fix it but am not sure now.
> > > Do you really want to make it possible ?
> > > It isn't an appropriate way to get last rows because "move forward
> > > all" takes very long time.
> > >
> >
> > Of course it is not an appropriate way to get the last rows like this.
> > The "right" way IMHO is to reverse the order in the query and to get the
> > first
> > rows.
> >
> > It is just for the sake of truth...
> >
>
> OK Attached is a patch.
> Could you apply to 6.5.3 ?
>

Sorry the patch is not right for 6.5.3 .
Please apply the following patch to 6.5.3 .

Regards.

Hiroshi Inoue
Inoue@tpf.co.jp

*** access/heap/heapam.c.orig    Mon Aug  2 14:56:36 1999
--- access/heap/heapam.c    Tue Nov  9 12:59:48 1999
***************
*** 775,782 ****         if (scan->rs_ptup.t_data == scan->rs_ctup.t_data &&
BufferIsInvalid(scan->rs_pbuf))        {
 
-             if (BufferIsValid(scan->rs_nbuf))
-                 ReleaseBuffer(scan->rs_nbuf);             return NULL;         }

--- 775,780 ----
***************
*** 833,842 ****                 ReleaseBuffer(scan->rs_pbuf);             scan->rs_ptup.t_data = NULL;
scan->rs_pbuf= InvalidBuffer;
 
-             if (BufferIsValid(scan->rs_nbuf))
-                 ReleaseBuffer(scan->rs_nbuf);
-             scan->rs_ntup.t_data = NULL;
-             scan->rs_nbuf = InvalidBuffer;             return NULL;         }

--- 831,836 ----
***************
*** 855,862 ****         if (scan->rs_ctup.t_data == scan->rs_ntup.t_data &&
BufferIsInvalid(scan->rs_nbuf))        {
 
-             if (BufferIsValid(scan->rs_pbuf))
-                 ReleaseBuffer(scan->rs_pbuf);             HEAPDEBUG_3;        /* heap_getnext returns NULL at end */
          return NULL;         }
 
--- 849,854 ----
***************
*** 915,924 ****                 ReleaseBuffer(scan->rs_nbuf);             scan->rs_ntup.t_data = NULL;
scan->rs_nbuf= InvalidBuffer;
 
-             if (BufferIsValid(scan->rs_pbuf))
-                 ReleaseBuffer(scan->rs_pbuf);
-             scan->rs_ptup.t_data = NULL;
-             scan->rs_pbuf = InvalidBuffer;             HEAPDEBUG_6;        /* heap_getnext returning EOS */
 return NULL;         }
 
--- 907,912 ----




В списке pgsql-sql по дате отправления:

Предыдущее
От: Hiroshi Inoue
Дата:
Сообщение: Re: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)
Следующее
От: "Imtiaz. S. M"
Дата:
Сообщение: Is this a bug?