Fix BUG #17335: Duplicate result rows in Gather node
Yura Sokolov <y.sokolov@postgrespro.ru>
From: Yura Sokolov <y.sokolov@postgrespro.ru>
To: pgsql-hackers@lists.postgresql.org
Cc: David Rowley <dgrowleyml@gmail.com>
Date: 2021-12-30T11:14:32Z
Lists: pgsql-hackers
Attachments
- v1-0001-Quick-fix-to-duplicate-result-rows-after-Append-p.patch (text/x-patch) patch v1-0001
- repro.sql (application/sql)
Good day, hackers. Problem: - Append path is created with explicitely parallel_aware = true - It has two child, one is trivial, other is parallel_aware = false . Trivial child is dropped. - Gather/GatherMerge path takes Append path as a child and thinks its child is parallel_aware = true. - But Append path is removed at the last since it has only one child. - Now Gather/GatherMerge thinks its child is parallel_aware, but it is not. Gather/GatherMerge runs its child twice: in a worker and in a leader, and gathers same rows twice. Reproduction code attached (repro.sql. Included as a test as well). Suggested quick (and valid) fix in the patch attached: - If Append has single child, then copy its parallel awareness. Bug were introduced with commit 8edd0e79460b414b1d971895312e549e95e12e4f "Suppress Append and MergeAppend plan nodes that have a single child." During discussion, it were supposed [1] those fields should be copied: > I haven't looked into whether this does the right things for parallel > planning --- possibly create_[merge]append_path need to propagate up > parallel-related path fields from the single child? But it were not so obvious [2]. Better fix could contain removing Gather/GatherMerge node as well if its child is not parallel aware. Bug is reported in https://postgr.es/m/flat/17335-4dc92e1aea3a78af%40postgresql.org Since no way to add thread from pgsql-bugs to commitfest, I write here. [1] https://postgr.es/m/17500.1551669976%40sss.pgh.pa.us [2] https://postgr.es/m/CAKJS1f_Wt_tL3S32R3wpU86zQjuHfbnZbFt0eqm%3DqcRFcdbLvw%40mail.gmail.com ---- regards Yura Sokolov y.sokolov@postgrespro.ru funny.falcon@gmail.com
Commits
-
Consider parallel awareness when removing single-child Appends
- 2ccd8fb29d74 12.10 landed
- f8807e7742e5 13.6 landed
- 357ff66153b4 14.2 landed
- f9a74c1498d2 15.0 landed
-
Suppress Append and MergeAppend plan nodes that have a single child.
- 8edd0e79460b 12.0 cited