Martijn van Oosterhout <kleptog(at)svana(dot)org> writes:
> I think the issue here is that transaction begin is not when you type
> "begin" but at your first actual query. You can obviously only start a
> transaction once you know what serialisation level you want, and you
> don't see that till after the begin.
Right, the snapshot does not become set until you do a non-utility
command (normally, SELECT/INSERT/UPDATE/DELETE). This is a feature, not
a bug, because it lets the transaction take table locks before its
snapshot becomes set. I believe the Fine Manual's discussion of
concurrency includes some examples where such locks are needed ...
regards, tom lane