From: | mark proctor <m(dot)proctor(at)bigfoot(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Recusrive Functions in 7.0.3 |
Date: | 2001-02-10 08:43:04 |
Message-ID: | 01021008430408.05071@localhost.localdomain |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
If I remove the line calling PERFORM it works without problems moving the children node for the passed integer into test and then exiting.
I can then repeat the process going through the output to test iteratively and do not have any problems.
However if I put the PERFORM line back in to create a recursive function it just goes on forever, and I only have 6 nodes.
CREATE FUNCTION get_children (integer) RETURNS integer AS
'
DECLARE
pnode_parent ALIAS FOR $1;
rec RECORD;
BEGIN
FOR rec IN SELECT * FROM tree_adjacency_matrix WHERE node_parent = pnode_parent LOOP
INSERT INTO test (node1, node2) VALUES(rec.node_child, rec.node_parent);
PERFORM get_children(rec.node_child);
END LOOP;
RETURN 0;
END;
'LANGUAGE 'plpgsql'
Mark
On Saturday 10 February 2001 03:29, Tom Lane wrote:
> <plpgsql(at)polar-digital(dot)com> writes:
> > Are recursive functions allowed in in 7.0.3
>
> Sure.
>
> play=> create function myfactorial(int) returns int as '
> play'> begin
> play'> if $1 > 1 then
> play'> return $1 * myfactorial($1 - 1);
> play'> end if;
> play'> return $1;
> play'> end;' language 'plpgsql';
> CREATE
> play=> select myfactorial(1);
> myfactorial
> -------------
> 1
> (1 row)
>
> play=> select myfactorial(10);
> myfactorial
> -------------
> 3628800
> (1 row)
>
> play=>
>
> I get a stack overflow crash at about myfactorial(7500), but that seems
> like a sufficient level of recursion depth for normal purposes ...
>
> > as I seem to be unable to
> > get them to work in plpgsql,
>
> Are you sure you aren't asking for infinite recursion, eg by invoking
> the same function with the same argument?
>
> regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | mark proctor | 2001-02-10 11:10:05 | Re: Recusrive Functions in 7.0.3 |
Previous Message | Tom Lane | 2001-02-10 08:42:11 | Re: Recusrive Functions in 7.0.3 |