On Wed, Nov 13, 2019 at 9:51 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > + /* > + * Since parallel workers cannot access data in temporary tables, parallel > + * vacuum is not allowed for temporary relation. > + */ > + if (RelationUsesLocalBuffers(onerel) && params->nworkers >= 0) > + { > + ereport(WARNING, > + (errmsg("skipping vacuum on \"%s\" --- cannot vacuum temporary > tables in parallel", > + RelationGetRelationName(onerel)))); > + relation_close(onerel, lmode); > + PopActiveSnapshot(); > + CommitTransactionCommand(); > + /* It's OK to proceed with ANALYZE on this table */ > + return true; > + } > + > > If we can not support the parallel vacuum for the temporary table then > shouldn't we fall back to the normal vacuum instead of skipping the > table. I think it's not fair that if the user has given system-wide > parallel vacuum then all the temp table will be skipped and not at all > vacuumed then user need to again perform normal vacuum on those > tables. >
Good point. However, I think the current coding also makes sense for cases like "Vacuum (analyze, parallel 2) tmp_tab;". In such a case, it will skip the vacuum part of it but will perform analyze. Having said that, I can see the merit of your point and I also vote to follow your suggestion and add a note to the document unless it makes code look ugly. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com