]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Consider parallel awareness when removing single-child Appends
authorDavid Rowley <drowley@postgresql.org>
Tue, 25 Jan 2022 08:14:27 +0000 (21:14 +1300)
committerDavid Rowley <drowley@postgresql.org>
Tue, 25 Jan 2022 08:14:27 +0000 (21:14 +1300)
commit357ff66153b4791d32c45724d8a0d3c91d89c937
tree4cbab8ec2e82543f6156da198cceb66c0d40b14a
parent29d9da36b7b132476ef7b31a5dace7bc7410cc82
Consider parallel awareness when removing single-child Appends

8edd0e794 added some code to remove Append and MergeAppend nodes when they
contained a single child node.  As it turned out, this was unsafe to do
when the Append/MergeAppend was parallel_aware and the child node was not.
Removing the Append/MergeAppend, in this case, could lead to the child plan
being called multiple times by parallel workers when it was unsafe to do
so.

Here we fix this by just not removing the Append/MergeAppend when the
parallel_aware flag of the parent and child node don't match.

Reported-by: Yura Sokolov
Bug: #17335
Discussion: https://postgr.es/m/b59605fecb20ba9ea94e70ab60098c237c870628.camel%40postgrespro.ru
Backpatch-through: 12, where 8edd0e794 was first introduced
src/backend/optimizer/plan/setrefs.c