aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/parallel.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2015-10-16 11:37:19 -0400
committerRobert Haas <rhaas@postgresql.org>2015-10-16 11:37:19 -0400
commit82b37765c76b8b2daf6cad3dfb5e5b4a2776d56f (patch)
tree53c53e32a0a7ff790d52b284cf09e05d845eb7b3 /src/backend/access/transam/parallel.c
parent6de6d96d971c76c8d7bd3b31e6f182906137f913 (diff)
downloadpostgresql-82b37765c76b8b2daf6cad3dfb5e5b4a2776d56f.tar.gz
postgresql-82b37765c76b8b2daf6cad3dfb5e5b4a2776d56f.zip
Fix a problem with parallel workers being unable to restore role.
check_role() tries to verify that the user has permission to become the requested role, but this is inappropriate in a parallel worker, which needs to exactly recreate the master's authorization settings. So skip the check in that case. This fixes a bug in commit 924bcf4f16d54c55310b28f77686608684734f42.
Diffstat (limited to 'src/backend/access/transam/parallel.c')
-rw-r--r--src/backend/access/transam/parallel.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index e09bdb20b0d..9c7428f5d6c 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -96,6 +96,9 @@ int ParallelWorkerNumber = -1;
/* Is there a parallel message pending which we need to receive? */
bool ParallelMessagePending = false;
+/* Are we initializing a parallel worker? */
+bool InitializingParallelWorker = false;
+
/* Pointer to our fixed parallel state. */
static FixedParallelState *MyFixedParallelState;
@@ -815,6 +818,9 @@ ParallelWorkerMain(Datum main_arg)
char *tstatespace;
StringInfoData msgbuf;
+ /* Set flag to indicate that we're initializing a parallel worker. */
+ InitializingParallelWorker = true;
+
/* Establish signal handlers. */
pqsignal(SIGTERM, die);
BackgroundWorkerUnblockSignals();
@@ -942,6 +948,7 @@ ParallelWorkerMain(Datum main_arg)
* We've initialized all of our state now; nothing should change
* hereafter.
*/
+ InitializingParallelWorker = false;
EnterParallelMode();
/*