diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/transam/parallel.c | 12 | ||||
-rw-r--r-- | src/backend/commands/variable.c | 10 |
2 files changed, 6 insertions, 16 deletions
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index d5bee10cd4b..df0cd775588 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -1402,6 +1402,10 @@ ParallelWorkerMain(Datum main_arg) libraryspace = shm_toc_lookup(toc, PARALLEL_KEY_LIBRARY, false); StartTransactionCommand(); RestoreLibraryState(libraryspace); + + /* Restore GUC values from launching backend. */ + gucspace = shm_toc_lookup(toc, PARALLEL_KEY_GUC, false); + RestoreGUCState(gucspace); CommitTransactionCommand(); /* Crank up a transaction state appropriate to a parallel worker. */ @@ -1444,14 +1448,6 @@ ParallelWorkerMain(Datum main_arg) InvalidateSystemCaches(); /* - * Restore GUC values from launching backend. We can't do this earlier, - * because GUC check hooks that do catalog lookups need to see the same - * database state as the leader. - */ - gucspace = shm_toc_lookup(toc, PARALLEL_KEY_GUC, false); - RestoreGUCState(gucspace); - - /* * Restore current role id. Skip verifying whether session user is * allowed to become this role and blindly restore the leader's state for * current role. diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index b2336ad7efd..e5ddcda0b4a 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -519,16 +519,14 @@ check_transaction_read_only(bool *newval, void **extra, GucSource source) * We allow idempotent changes at any time, but otherwise this can only be * changed in a toplevel transaction that has not yet taken a snapshot. * - * As in check_transaction_read_only, allow it if not inside a transaction, - * or if restoring state in a parallel worker. + * As in check_transaction_read_only, allow it if not inside a transaction. */ bool check_XactIsoLevel(int *newval, void **extra, GucSource source) { int newXactIsoLevel = *newval; - if (newXactIsoLevel != XactIsoLevel && - IsTransactionState() && !InitializingParallelWorker) + if (newXactIsoLevel != XactIsoLevel && IsTransactionState()) { if (FirstSnapshotSet) { @@ -563,10 +561,6 @@ check_XactIsoLevel(int *newval, void **extra, GucSource source) bool check_transaction_deferrable(bool *newval, void **extra, GucSource source) { - /* Just accept the value when restoring state in a parallel worker */ - if (InitializingParallelWorker) - return true; - if (IsSubTransaction()) { GUC_check_errcode(ERRCODE_ACTIVE_SQL_TRANSACTION); |