]> granicus.if.org Git - postgresql/commitdiff
Invalidate caches after cranking up a parallel worker transaction.
authorRobert Haas <rhaas@postgresql.org>
Fri, 16 Oct 2015 15:31:23 +0000 (11:31 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 16 Oct 2015 15:31:23 +0000 (11:31 -0400)
Starting a parallel worker transaction changes our notion of which XIDs
are in-progress or committed, and our notion of the current command
counter ID.  Therefore, our view of these caches prior to starting
this transaction may no longer valid.  Defend against that by clearing
them.

This fixes a bug in commit 924bcf4f16d54c55310b28f77686608684734f42.

src/backend/access/transam/parallel.c

index 0b94c0f87e967b49ed1704ce9114bfd7e1c23db7..e09bdb20b0d9d56056a858989a652ad0de10a435 100644 (file)
@@ -28,6 +28,7 @@
 #include "tcop/tcopprot.h"
 #include "utils/combocid.h"
 #include "utils/guc.h"
+#include "utils/inval.h"
 #include "utils/memutils.h"
 #include "utils/resowner.h"
 #include "utils/snapmgr.h"
@@ -928,6 +929,12 @@ ParallelWorkerMain(Datum main_arg)
        Assert(asnapspace != NULL);
        PushActiveSnapshot(RestoreSnapshot(asnapspace));
 
+       /*
+        * We've changed which tuples we can see, and must therefore invalidate
+        * system caches.
+        */
+       InvalidateSystemCaches();
+
        /* Restore user ID and security context. */
        SetUserIdAndSecContext(fps->current_user_id, fps->sec_context);