On Wed, Aug 4, 2021 at 3:21 AM Robert Haas <robertmhaas@gmail.com> wrote: > >The idea I sort of had floating around in my mind is a little >different than what Greg has implemented. I was thinking that we could >just skip SerializeSnapshot and the corresponding shm_toc_allocate() >if !IsolationUsesXactSnapshot(). Then on the restore side we could >just call shm_toc_lookup() with noError = true and skip >RestoreTransactionSnapshot/RestoreSnapshot if it returns NULL.
I've tried to follow your description and have attached a patch to hopefully match it, but it doesn't pass "make check-world". Perhaps I messed something up (apologies if so), or additional changes are needed to match what you had in mind or correct additional issues you didn't foresee?
t/001_pgbench_with_server.pl .. 10/? # Failed test 'pgbench scale 1 initialization status (got 1 vs expected 0)' # at t/001_pgbench_with_server.pl line 108. ... # creating primary keys... # pgbench: fatal: query failed: ERROR: cannot take query snapshot during a parallel operation # CONTEXT: parallel worker # pgbench: query was: alter table pgbench_accounts add primary key (aid)
Greg, thanks for the fast response! I suppose that a check for IsolationUsesXactSnapshot() is also useful in a GetTransactionSnapshot for the correct processing of a case with NULL transaction snapshot.