On Mon, Feb 22, 2021 at 6:25 PM [email protected]
<[email protected]> wrote:
>
> Hi
>
> (I may be wrong here)
> I noticed that the patch does not have check for partial index(index
> predicate).
> It seems parallel index build will check it like the following:
> ----------
> /*
> * Determine if it's safe to proceed.
> *
> * Currently, parallel workers can't access the leader's temporary
> tables.
> * Furthermore, any index predicate or index expressions must be
> parallel
> * safe.
> */
> if (heap->rd_rel->relpersistence == RELPERSISTENCE_TEMP ||
> !is_parallel_safe(root, (Node *)
> RelationGetIndexExpressions(index)) ||
> !is_parallel_safe(root, (Node *)
> RelationGetIndexPredicate(index)))
> ----------
>
> Should we do parallel safety check for it ?
>
Thanks, it looks like you're right, it is missing (and there's no test for it).
I can add a fix to the index-checking code, something like:
+ if (!found_max_hazard)
+ {
+ ii_Predicate = RelationGetIndexPredicate(index_rel);
+ if (ii_Predicate != NIL)
+ {
+ if (max_parallel_hazard_walker((Node *)ii_Predicate, context))
+ {
+ found_max_hazard = true;
+ }
+ }
+ }
Also will need a bit of renaming of that function.
I'll include this in the next patch update.
Regards,
Greg Nancarrow
Fujitsu Australia