Rob Nikander <rob.nikander@xxxxxxxxx> writes: > Are there guarantees about how this plpgsql behaves? It’s deleting from a table while it loops over it. So far it seems like the delete is logically after the select, as I hoped, and doesn’t interfere. > for row in select * from some_stuff loop > delete from some_stuff where … > ... > end loop; Sure. A query will not see the effects of queries that start after it. This isn't particularly plpgsql-specific. Some qualifications are needed if you have triggers or volatile functions in the first query (those *can* see later effects); but this usage seems safe enough. regards, tom lane