Fix BUG #17335: Duplicate result rows in Gather node

From: Yura Sokolov <y(dot)sokolov(at)postgrespro(dot)ru>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Cc: David Rowley <dgrowleyml(at)gmail(dot)com>
Subject: Fix BUG #17335: Duplicate result rows in Gather node
Date: 2021-12-30 11:14:32
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Good day, hackers.

- 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
Since no way to add thread from pgsql-bugs to commitfest, I write here.


Yura Sokolov

Attachment Content-Type Size
v1-0001-Quick-fix-to-duplicate-result-rows-after-Append-p.patch text/x-patch 10.8 KB
repro.sql application/sql 4.6 KB


Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Borisov 2021-12-30 11:45:42 Re: Pre-allocating WAL files
Previous Message Japin Li 2021-12-30 11:01:22 Re: Autovacuum and idle_session_timeout