Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com> writes:
> I believe it sees the one that was valid in the snapshot as of the
> beginning of the function.
Actually, the problem is that it can see *both* that row and the updated
row; it's a crapshoot which one will be returned by the SELECT INTO.
The reason this can happen is that we're not doing SetQuerySnapshot
between commands of a plpgsql function. There is discussion going way
way back about whether we shouldn't do so (see the archives). I think
the major reason why we have not done it is fear of introducing
non-backwards-compatible behavior. Seems like 8.0 is exactly the right
version to consider doing that in.
regards, tom lane