]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Prevent parallel index build in a standalone backend.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 30 Nov 2020 19:38:00 +0000 (14:38 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 30 Nov 2020 19:38:00 +0000 (14:38 -0500)
This can't work if there's no postmaster, and indeed the code got an
assertion failure trying.  There should be a check on IsUnderPostmaster
gating the use of parallelism, as the planner has for ordinary
parallel queries.

Commit 40d964ec9 got this right, so follow its model of checking
IsUnderPostmaster at the same place where we check for
max_parallel_maintenance_workers == 0.  In general, new code
implementing parallel utility operations should do the same.

Report and patch by Yulin Pei, cosmetically adjusted by me.
Back-patch to v11 where this code came in.

Discussion: https://postgr.es/m/HK0PR01MB22747D839F77142D7E76A45DF4F50@HK0PR01MB2274.apcprd01.prod.exchangelabs.com

src/backend/optimizer/plan/planner.c

index 8e152078c59c7eced51e53b4198917b27b673e53..a10bb89dcb6c74e90e89383b8cc6c384fa9b401c 100644 (file)
@@ -6090,8 +6090,12 @@ plan_create_index_workers(Oid tableOid, Oid indexOid)
        double          reltuples;
        double          allvisfrac;
 
-       /* Return immediately when parallelism disabled */
-       if (dynamic_shared_memory_type == DSM_IMPL_NONE ||
+       /*
+        * We don't allow performing parallel operation in standalone backend or
+        * when parallelism is disabled.
+        */
+       if (!IsUnderPostmaster ||
+               dynamic_shared_memory_type == DSM_IMPL_NONE ||
                max_parallel_maintenance_workers == 0)
                return 0;