From: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
---|---|
To: | James David Smith <james(dot)david(dot)smith(at)gmail(dot)com> |
Cc: | "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org> |
Subject: | Re: Make a LOOP function with a delay |
Date: | 2013-07-24 13:21:23 |
Message-ID: | CAHyXU0xEgmNBEFc0-mF-=mrb4t4zXG+_4spVMqzCZC2AeEE6nw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
On Wed, Jul 24, 2013 at 6:44 AM, James David Smith
<james(dot)david(dot)smith(at)gmail(dot)com> wrote:
> Hi there,
>
> I have a query as below which works great and does exactly what I want
> it too. It has this form:
>
> SELECT my_function(
> field_one,
> field_two,
> field_three,
> field_four
> )
> FROM my_table
> WHERE row_number = 1;
>
> However I want to make it loop and run the function for each row of
> my_table. I'd also like to put a delay in it. But I'm not quite sure
> how. The pseudo-code would be:
>
> 1) Take the first row from the table
> 2) Run the function with the row number in the WHERE clause
> 3) Pause for 5 seconds
> 4) Move to the next row
> 5) Run the function again
> etc... until the whole table is done.
>
> I'd really appreciate some guidance please. I've looked at loops in
> the manual but it's a steep learning curve...
SQL best practice is generally to avoid loops. one way to do that:
CREATE OR REPLACE FUNCTION Notice(msg TEXT) RETURNS VOID AS
$$
BEGIN
RAISE NOTICE '[%] %', clock_timestamp()::timestamp(2), msg;
END;
$$ LANGUAGE plpgsql;
SELECT my_function(
field_one,
field_two,
field_three,
field_four
),
notice('did row ' || row_number),
pg_sleep(.1)
FROM my_table;
From | Date | Subject | |
---|---|---|---|
Next Message | James David Smith | 2013-07-24 13:37:18 | Re: Make a LOOP function with a delay |
Previous Message | James David Smith | 2013-07-24 11:44:48 | Make a LOOP function with a delay |