[HACKERS] Backward reading

2008-02-01 Thread mac_man2005
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?

Thanks.

Re: [HACKERS] Backward reading

2008-02-01 Thread Simon Riggs
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...

-- 
  Simon Riggs
  2ndQuadrant  http://www.2ndQuadrant.com 


---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [HACKERS] Backward reading

2008-02-01 Thread Gregory Stark
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=4 width=512)
   Sort Key: i
   -  Seq Scan on h  (cost=0.00..7666.94 rows=4 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