Re: strange infinite loop in plpgsql - Mailing list pgsql-general

From Tom Lane
Subject Re: strange infinite loop in plpgsql
Date
Msg-id 16944.1194716194@sss.pgh.pa.us
Whole thread Raw
In response to strange infinite loop in plpgsql  (rihad <rihad@mail.ru>)
Responses Re: strange infinite loop in plpgsql  (rihad <rihad@mail.ru>)
Re: strange infinite loop in plpgsql  (rihad <rihad@mail.ru>)
List pgsql-general
rihad <rihad@mail.ru> writes:
>      LOOP
>        SELECT date+1 INTO day FROM days WHERE date=day OR EXTRACT(dow
> FROM day) IN (0,6);
>        EXIT WHEN NOT FOUND;
>        timeout := timeout + 86400;
>      END LOOP;

If the EXTRACT condition is true, then the SELECT will always succeed.
This code will get even more whacko once you have more than one row
in "days", because it'll pick a random one of the rows in that case
(in practice, the physically first one).  I think you need something
more like

    LOOP
      IF EXTRACT(dow FROM day) IN (0,6) THEN
        -- don't bother to consult table on weekends
        day := day + 1;
      ELSE
        SELECT date+1 INTO day FROM days WHERE date=day;
        EXIT WHEN NOT FOUND;
      END IF;
      timeout := timeout + 86400;
    END LOOP;

BTW, you forgot to initialize "timeout".

            regards, tom lane

pgsql-general by date:

Previous
From: rihad
Date:
Subject: strange infinite loop in plpgsql
Next
From: Tom Lane
Date:
Subject: Re: (Never?) Kill Postmaster?