From 33187ab5984fcbb4afc0999e478b3e965c4262ab Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 31 Jul 2024 20:54:59 -0400 Subject: Revert "Allow parallel workers to cope with a newly-created session user ID." This reverts commit 849326e49a5dd56941eb8fb4699130c301bff303. Some buildfarm animals are failing with "cannot change "client_encoding" during a parallel operation". It looks like assign_client_encoding is unhappy at being asked to roll back a client_encoding setting after a parallel worker encounters a failure. There must be more to it though: why didn't I see this during local testing? In any case, it's clear that moving the RestoreGUCState() call is not as side-effect-free as I thought. Given that the bug f5f30c22e intended to fix has gone unreported for years, it's not something that's urgent to fix; I'm not willing to risk messing with it further with only days to our next release wrap. --- src/backend/access/transam/parallel.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/backend/access/transam/parallel.c') diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 8606c009dd9..2b8bc2f58dd 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -1414,6 +1414,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. */ @@ -1455,14 +1459,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 -- cgit v1.2.3