Thread: Stepping through a table.
Greetings, If I need to process each record in a table, how can I step through each record? I suppose I could write a query to return all records and fetch each row that way, but that would be a big memory pig, no? Also, the table could get pretty big. Is there some way to navigate a table, maybe fetching one record from the disk at a time, or something similar? Thanks, Matthew Hagerty
At 05:58 +0300 on 16/08/1999, Matthew Hagerty wrote: > If I need to process each record in a table, how can I step through each > record? I suppose I could write a query to return all records and fetch > each row that way, but that would be a big memory pig, no? Also, the table > could get pretty big. Is there some way to navigate a table, maybe > fetching one record from the disk at a time, or something similar? I guess you are looking for cursors. Read about it on page 154 of the PostgreSQL user guide, or check out the manpage about "declare". Note that PostgreSQL cursors are readonly, and can't be used to update information. Herouth -- Herouth Maoz, Internet developer. Open University of Israel - Telem project http://telem.openu.ac.il/~herutma
Thanks, I was thinking that's what cursors did, but I can't find a good source anywhere that actually tells you that you are reading one record at a time instead of submitting a whole query where the results are place in memory. You mentioned that cursors are read only. Can I do update statements while navigating with cursors? Or do they lock the records they are reading? Again, thank you. Matthew At 12:19 PM 8/16/99 +0300, Herouth Maoz wrote: >At 05:58 +0300 on 16/08/1999, Matthew Hagerty wrote: > > >> If I need to process each record in a table, how can I step through each >> record? I suppose I could write a query to return all records and fetch >> each row that way, but that would be a big memory pig, no? Also, the table >> could get pretty big. Is there some way to navigate a table, maybe >> fetching one record from the disk at a time, or something similar? > >I guess you are looking for cursors. Read about it on page 154 of the >PostgreSQL user guide, or check out the manpage about "declare". Note that >PostgreSQL cursors are readonly, and can't be used to update information. > >Herouth > >-- >Herouth Maoz, Internet developer. >Open University of Israel - Telem project >http://telem.openu.ac.il/~herutma > >
At 23:52 +0300 on 16/08/1999, Matthew Hagerty wrote: > > You mentioned that cursors are read only. Can I do update statements while > navigating with cursors? Or do they lock the records they are reading? If they do, they only lock them to other transactions. Since you are within the same connection and thus the same transaction (cursors can only be used within BEGIN/END transaction blocks), of course the records are not locked. As far as I know, you can make update statements. What I am not sure about is what happens if you rewind the cursor and read the updated record again - whether you will see the updated record or the non-updated one. You'll have to test this. Herouth -- Herouth Maoz, Internet developer. Open University of Israel - Telem project http://telem.openu.ac.il/~herutma