> Hi guys! I have the following queries, which will basically select > data, insert it onto a new table and update a column on the original > table.
I'm sure your example is a gross simplification of what you're really
doing, but if that's really all you're doing, why not do it all at once,
instead of row at a time?
BEGIN;
insert into tableb (id) select id from tablea;
update tablea set migrated=true;
COMMIT;
thats far more efficient that the row-at-a-time iterative solution you
showed.
You're right, that is just an example.
I'm basically using a CTE to select the data and then, inserting some rows onto a new table.
I just don't know how to tell my function to perform 2000 records at once, and then when calling it again it will "know" where to start from
Maybe, I already have everything I need?
UPDATE tablea a SET migrated = yes WHERE a.id =row.id;
On my original select, the row will have migrated = false. Maybe All I need to put is a limit 2000 and the query will do the rest?
Example:
CREATEor REPLACE FUNCTION migrate_data()
RETURNS integer;declarerow record;BEGINFORrowINEXECUTE' SELECT id FROM tablea WHERE migrated = false
'
LOOP
INSERTINTO tableb (id)VALUES(row.id);UPDATE tablea a SET migrated = yes WHERE a.id =row.id;END LOOP;RETURN num_rows;-- I want it to return the number of processed rowsEND$$ language 'plpgsql';