Hi, I've recently been using PostgreSQL and am having some trouble performing an insert. My situation is this: I have a table, A with 15 fields, out of which I am interested in 2 fields, a and b. The table has 8,000,000 rows I have another table, B, which has 3 fields a, c, and d. The field a references field a in table A. Table B is empty at this point. I tried to do an insert using the following command: insert into B (a,c,d) select a, f1(b), f2(b) from A; where f1() and f2() are some functions. This ran for more than 5 hours and then exited with an error: ERROR: out of memory DETAIL: Failed on request of size 44 I wondered whether this was because temporary columns were being generated. So I then wrote a small PL/pgSQL function: create or replace function fpinsert() returns void as ' declare arow record; counter integer := 0; begin for arow in select * from A loop execute ''insert into B (a, c, d) values ('' || quote_literal(arow.a) || '','' || ''f1('' || quote_literal(arow.b) || ''),'' || ''f2('' || quote_literal(arow.b) || ''));''; counter := counter + 1; end loop; return; end; ' language 'plpgsql'; I assumed that this would run (possible slower) since it would loop over the rows one by one. However this also failed with an out of memory error (same as above, though the request size was 29). Am I doing anything obviously wrong? I don't really care that the insert takes a long time as it's a one time thing. But I can't see why my PL/pgSQL function will also run out of memory, since it's operating row by row. Any pointers would be greatly appreciated. The machine I'm running on has 16GB of RAM and I'm running PostgreSQL 7.4.13 on RedHat Enterprise Linux Thanks, ------------------------------------------------------------------- Rajarshi Guha <rguha@xxxxxxxxxxx> GPG Fingerprint: 0CCA 8EE2 2EEB 25E2 AB04 06F7 1BB9 E634 9B87 56EE ------------------------------------------------------------------- All great ideas are controversial, or have been at one time.