On Mon, Jan 2, 2012 at 7:13 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Simon Riggs <si...@2ndquadrant.com> writes: >> On Mon, Jan 2, 2012 at 6:06 PM, Noah Misch <n...@leadboat.com> wrote: >>> On Mon, Jan 02, 2012 at 05:09:16PM +0000, Simon Riggs wrote: >>>> Attached patch makes SnapshotNow into an MVCC snapshot, > >>> That's a neat trick. However, if you start a new SnapshotNow scan while >>> one is >>> ongoing, the primordial scan's snapshot will change mid-stream. > >> Do we ever do that? > > Almost certainly yes. For example, a catcache load may invoke catcache > or relcache reload operations on its way to opening the table or index > needed to fetch the desired row. > > I think you can only safely do this if each caller has its own snapshot > variable, a la SnapshotDirty, and that's going to be hugely more > invasive.
I think I can avoid doing things that way and keep it non-invasive. If we #define SnapshotNow (GetSnapshotNow()) and make GetSnapshotNow() reuse the static SnapshotNowData if possible. If not available we can allocate a new snapshot in TopTransactionContext. We can free the snapshot at the end of scan. That hides most of the complexity without causing any problems, ISTM. Working on this now. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers