Re: Recursive PLPGSQL function? - Mailing list pgsql-general

From DeJuan Jackson
Subject Re: Recursive PLPGSQL function?
Date
Msg-id 41111538.1080300@speedfc.com
Whole thread Raw
In response to Recursive PLPGSQL function?  ("Mark Cave-Ayland" <m.cave-ayland@webbased.co.uk>)
List 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@postgresql.org)
>
>


pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Recursive PLPGSQL function?
Next
From: David Rysdam
Date:
Subject: COPY not handling BLOBs