On 4/15/24 20:35, Tomas Vondra wrote: > On 4/15/24 10:18, Tomas Vondra wrote: >> ... >> >> I'll try a bit more to make this work without the temp table. >> > > Considering the earlier discussion in e2933a6e1, I think making the > table TEMP is the best fix, so I'll do that. Thanks for remembering that > change, Alexander! >
D'oh! I pushed this fix to stabilize the test earlier today, but I just realized it unfortunately makes the test useless. The idea of the test was to build BRIN indexes with/without parallelism, and check that the indexes are exactly the same. The instability comes from deletes, which I added to get "empty" ranges in the table, which may not be cleaned up in time for the CREATE INDEX commands, depending on what else is happening. A TEMPORARY table does not have this issue (as observed in e2933a6e1), but there's the minor problem that plan_create_index_workers() does this: /* * 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))) { parallel_workers = 0; goto done; } That is, no parallel index builds on temporary tables. Which means the test is not actually testing anything :-( Much more stable, but not very useful for finding issues. I think the best way to stabilize the test is to just not delete the rows. That means we won't have any "empty" ranges (runs of pages without any tuples). regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company