aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/parallel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/parallel.c')
-rw-r--r--src/backend/access/transam/parallel.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index 9aba17bd5e9..d4e84aabac7 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -1420,6 +1420,17 @@ ParallelWorkerMain(Datum main_arg)
tstatespace = shm_toc_lookup(toc, PARALLEL_KEY_TRANSACTION_STATE, false);
StartParallelWorkerTransaction(tstatespace);
+ /*
+ * Restore relmapper and reindex state early, since these affect catalog
+ * access. Ideally we'd do this even before calling InitPostgres, but
+ * that has order-of-initialization problems, and also the relmapper would
+ * get confused during the CommitTransactionCommand call above.
+ */
+ relmapperspace = shm_toc_lookup(toc, PARALLEL_KEY_RELMAPPER_STATE, false);
+ RestoreRelationMap(relmapperspace);
+ reindexspace = shm_toc_lookup(toc, PARALLEL_KEY_REINDEX_STATE, false);
+ RestoreReindexState(reindexspace);
+
/* Restore combo CID state. */
combocidspace = shm_toc_lookup(toc, PARALLEL_KEY_COMBO_CID, false);
RestoreComboCIDState(combocidspace);
@@ -1482,14 +1493,6 @@ ParallelWorkerMain(Datum main_arg)
false);
RestorePendingSyncs(pendingsyncsspace);
- /* Restore reindex state. */
- reindexspace = shm_toc_lookup(toc, PARALLEL_KEY_REINDEX_STATE, false);
- RestoreReindexState(reindexspace);
-
- /* Restore relmapper state. */
- relmapperspace = shm_toc_lookup(toc, PARALLEL_KEY_RELMAPPER_STATE, false);
- RestoreRelationMap(relmapperspace);
-
/* Restore uncommitted enums. */
uncommittedenumsspace = shm_toc_lookup(toc, PARALLEL_KEY_UNCOMMITTEDENUMS,
false);