"Hiroshi Inoue" <Inoue@tpf.co.jp> writes:
> It's possible for a function to use a unique snapshot
> if there are only SELECT statements in the function
> but it's impossible if there are UPDATE/DELETE or
> SELECT .. FOR UPDATE statements etc.
You are confusing snapshots (which determine visibility of the results
of OTHER transactions) with command-counter incrementing (which
determines visibility of the results of OUR OWN transaction). I agree
that plpgsql's handling of command-counter changes is broken, but it
does not follow that sprinkling the code with SetQuerySnapshot is wise.
regards, tom lane