Just as a permanent XID is allocate only when needed, is there any way
to defer the acquisition of a snapshot till it is needed such that
statements like "if x = 1 ..." and "x := 1" don't acquire snapshots just
because they are in a non-read only function? Could this be delayed
till the start of any select/update/delete/insert, DDL, etc?