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)
>
>
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? |