"Simon Riggs" <[EMAIL PROTECTED]> writes:

> On Fri, 2008-02-01 at 19:25 +0100, [EMAIL PROTECTED] wrote:
>> PostgreSQL allows "backward reading" tuples writing the tuple's length
>> after and before the tuple proper, in case a 'randomAccess' is
>> requested.
>>  
>> Is there any example of backward reading tuples into PostgreSQL code?
>
> Don't think so, but we don't always use randomAccess anyway. Sounds like
> we might be able to drop the length at the end of each tuple in those
> cases...

We already do. We only generate the "frozen" tape when we think it might be
necessary.

I think the easiest (possibly only?) way to trigger this case is to run the
query in a cursor like:

postgres=# set enable_indexscan = off;
SET

postgres=# explain select * from h order by i;
                           QUERY PLAN                           
----------------------------------------------------------------
 Sort  (cost=61772.22..62022.20 rows=99994 width=512)
   Sort Key: i
   ->  Seq Scan on h  (cost=0.00..7666.94 rows=99994 width=512)
(3 rows)

postgres=# begin;
BEGIN

postgres=# declare c cursor for select * from h order by i;
DECLARE CURSOR
postgres=# fetch 5 from c;
 i |   r  
---+------
 1 | 10352
 2 | 15034
 3 | 91904
 4 | 89058
 5 | 87001
(5 rows)

postgres=# fetch backward 5 from c;
 i |   r  
---+------
 4 | 89058
 3 | 91904
 2 | 15034
 1 | 10352
(4 rows)


-- 
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com
  Ask me about EnterpriseDB's RemoteDBA services!

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to