ср, 4 авг. 2021 г. в 07:41, Greg Nancarrow <gregn4...@gmail.com>:
> On Wed, Aug 4, 2021 at 3:21 AM Robert Haas <robertmh...@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. This corrects mentioned check-world test. PFA v7 patch.
v7-0001-Correct-usage-of-transaction-snapshot-in-a-parall.patch
Description: Binary data