Hello,

On Mon, Jan 18, 2016 at 1:37 PM, drum.lu...@gmail.com <drum.lu...@gmail.com>
wrote:

> I've created a function that allows me to do an huge update.
>
> But I need to limit this function. I need to do 50k rows (example) and
> then stop it. After that I need to continue from the rows that I've
> stopped... I'll have to modify the call function *select batch_number()* as
> well.
>
> How can I do that? Using for?
>
> The function below is already working, but, the table has 40m rows. And
> it's taking years.
>
>
Do you need to run the function on any Staging(Not Production).  I mean, do
you want to run this batch processes on a single transaction.

If not, I had the similar problem, where I needed to implement a function,
which we can run in multiple sessions. I ran this function in one of the BI
servers, where we have around 5 Million records.

Find this
<http://manojadinesh.blogspot.com/2015/07/parallel-operations-with-plpgsql_9.html>link
about the implementation details.

If your question was about "Using Loops", then please ignore my comments.

FUNCTION:
>
> CREATE or REPLACE FUNCTION batch_number()
> RETURNS INTEGER AS $$
> declare
>    batch_num integer;
>    offset_num integer;begin
>     offset_num = 0;
>     batch_num = 1;
>
>     while (select true from gorfs.nfs_data where batch_number is null limit 
> 1) loop
>         with ids(id) as
>         (
>             select
>                 file_id
>             from
>                 gorfs.nfs_data
>             order by
>                 file_id
>             offset offset_num
>             limit 1000
>         )
>         update
>             gorfs.nfs_data
>         set
>             batch_number = batch_num
>         from ids
>         where file_id = ids.id;
>
>         offset_num = offset_num + 1000;
>         batch_num = batch_num + 1;
>     end loop;
>
>     return batch_num;end
> $$ language 'plpgsql';
>
>


-- 

Regards,
Dinesh
manojadinesh.blogspot.com

Reply via email to