PL/pgSQL: recursion? - Mailing list pgsql-sql

From Albert REINER
Subject PL/pgSQL: recursion?
Date
Msg-id 20010102223136.A1265@frithjof
Whole thread Raw
Responses Re: PL/pgSQL: recursion?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
Saluton,

is there any possibility to do recursion in plpgsql-functions? Here is
what I tried (I know that I can do it with a simple loop, of course; I
am just curious about what one can or cannot do in plpgsql):

,----[ test-recursion ]
| drop table ttt;
| create table ttt
|   ( id int4,
|     pid int4 );
| 
| insert into ttt values (1, NULL);
| insert into ttt values (2, NULL);
| insert into ttt values (3, 1);
| insert into ttt values (4, 1);
| insert into ttt values (5, 1);
| insert into ttt values (6, 2);
| insert into ttt values (7, 2);
| 
| drop function idPath(int4);
| create function idPath(int4) returns text as '
| declare
|   str text;
|   str2 text;
|   r record;
| begin
|   select id, pid into r from ttt where id = $1;
|   str := r.id::text;
|   if r.pid IS NOT NULL then
|     str2 := idPath(r.id);
|     str := str || '':'' || str2;
|   end if;
|   return str;
| end;' language 'plpgsql';
| 
`----

And when I tried to use it, I got:

,----
| select idPath(5);
| pqReadData() -- backend closed the channel unexpectedly.
|       This probably means the backend terminated abnormally
|       before or while processing the request.
| The connection to the server was lost. Attempting reset: Failed.
`----

I'm running Postgres 7.0.2.

Thanks in advance,

Albert.


-- 

--------------------------------------------------------------------------
Albert Reiner                                   <areiner@tph.tuwien.ac.at>
Deutsch       *       English       *       Esperanto       *       Latine
--------------------------------------------------------------------------


pgsql-sql by date:

Previous
From: "Nikolaj Lundsgaard"
Date:
Subject: Sv: how to build this query ??? Please help !!!
Next
From: "Albert REINER"
Date:
Subject: Ensuring primary key is referenced at least once upon commit