Re: Make a LOOP function with a delay
От | Merlin Moncure |
---|---|
Тема | Re: Make a LOOP function with a delay |
Дата | |
Msg-id | CAHyXU0xEgmNBEFc0-mF-=mrb4t4zXG+_4spVMqzCZC2AeEE6nw@mail.gmail.com обсуждение исходный текст |
Ответ на | Make a LOOP function with a delay (James David Smith <james.david.smith@gmail.com>) |
Ответы |
Re: Make a LOOP function with a delay
|
Список | pgsql-novice |
On Wed, Jul 24, 2013 at 6:44 AM, James David Smith <james.david.smith@gmail.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;
В списке pgsql-novice по дате отправления: