Re: Recursive PLPGSQL function?

From: DeJuan Jackson <djackson(at)speedfc(dot)com>
To: Mark Cave-Ayland <m(dot)cave-ayland(at)webbased(dot)co(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Recursive PLPGSQL function?
Date: 2004-08-04 16:56:24
Message-ID: 41111538.1080300@speedfc.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

If I'm not mistaken you have an infinit recursion because you are always
pulling the same id (whatever _id starts at) throughout each function call.

Postgres is most likely killing the functions when it's hits some stack
or memory limit.

Mark Cave-Ayland wrote:

>Hi everyone,
>
>I'm trying to write a recursive plpgsql function in PostgreSQL 7.4.2
>that given a tree node id (ictid) will return all the nodes below it in
>the tree, one row per node. When I try and execute the function I get
>the following error message:
>
>CONTEXT: PL/pgSQL function "findsubcategories" line 15 at for over
>select rows
>PL/pgSQL function "findsubcategories" line 15 at for over select rows
>PL/pgSQL function "findsubcategories" line 15 at for over select rows
>PL/pgSQL function "findsubcategories" line 15 at for over select rows
>...repeated many many times...
>
>
>Can anyone see where I am going wrong in my function? I found a
>reference to "for over select rows" in pl_funcs.c but it appears to be
>denoting a statement type? The code is given below:
>
>
>CREATE OR REPLACE FUNCTION plpgsql.findsubcategories(int8) RETURNS SETOF
>inventory.cattree AS '
>DECLARE
> _row inventory.cattree%ROWTYPE;
> _nrow inventory.cattree%ROWTYPE;
> _id ALIAS FOR $1;
>
>BEGIN
> -- Select the starting tree entry
> FOR _row IN SELECT * FROM inventory.cattree WHERE parentictid =
>_id LOOP
>
> -- Return this category
> RETURN NEXT _row;
>
> -- Recurse for each child function
> FOR _nrow IN SELECT * FROM
>plpgsql.findsubcategories(_row.parentictid) LOOP
> RETURN NEXT _nrow;
> END LOOP;
>
> END LOOP;
>
> -- Return the entire set
> RETURN;
>END
>' LANGUAGE 'plpgsql';
>
>
>If this is not possible, can anyone else suggest a way of getting the
>required result?
>
>
>Many thanks,
>
>Mark.
>
>---
>
>Mark Cave-Ayland
>Webbased Ltd.
>Tamar Science Park
>Derriford
>Plymouth
>PL6 8BX
>England
>
>Tel: +44 (0)1752 764445
>Fax: +44 (0)1752 764446
>
>
>This email and any attachments are confidential to the intended
>recipient and may also be privileged. If you are not the intended
>recipient please delete it from your system and notify the sender. You
>should not copy it or use it for any purpose nor disclose or distribute
>its contents to any other person.
>
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message David Rysdam 2004-08-04 17:17:48 COPY not handling BLOBs
Previous Message Tom Lane 2004-08-04 16:43:31 Re: Recursive PLPGSQL function?