[The manual for Postgres 12 says][1]: > The following operations are always parallel restricted.
> - Scans of common table expressions (CTEs). > - Scans of temporary tables. > - ... Further down on the same [manual page:][2] > [...] Similarly, functions must be marked PARALLEL RESTRICTED if they access > temporary tables, client connection state, cursors, prepared > statements, or miscellaneous backend-local state which the system > cannot synchronize across workers. For example, setseed and random are > parallel restricted for this last reason. No mention of CTEs. I searched the list archives and found a statement from Thomas Munro [here][3]: > That means that these CTEs can only be scanned in the leader process. Now I am unsure whether I can use `PARALLEL SAFE` for functions containing a CTE (while fulfilling all other criteria)? Would the new inlining of CTEs in Postgres 12 have any role in this? I posted a [similar question on dba.SE][4]. Regards Erwin Brandstetter [1]: https://www.postgresql.org/docs/12/parallel-safety.html [2]: https://www.postgresql.org/docs/12/parallel-safety.html#PARALLEL-LABELING [3]: https://www.postgresql.org/message-id/CAEepm=03s4yih+c0pctfki0o8zgq-p4vfcvek5vvxcr6axh...@mail.gmail.com [4]: https://dba.stackexchange.com/q/251274/3684 That means that these CTEs can only be scanned in the leader process.