pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: David Rowley <drowley@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Fix use of incorrect TupleTableSlot in DISTINCT aggregates
Date: Thu, 04 Jan 2024 07:39:58 +0000
Message-ID: <E1rLIKc-00DQ7h-5F@gemulon.postgresql.org> (raw)

Fix use of incorrect TupleTableSlot in DISTINCT aggregates

1349d2790 added code to allow DISTINCT and ORDER BY aggregates to work
more efficiently by using presorted input.  That commit added some code
that made use of the AggState's tmpcontext and adjusted the
ecxt_outertuple and ecxt_innertuple slots before checking if the current
row is distinct from the previously seen row.  That code forgot to set the
TupleTableSlots back to what they were originally, which could result in
errors such as:

ERROR:  attribute 1 of type record has wrong type

This only affects aggregate functions which have multiple arguments when
DISTINCT is used.  For example: string_agg(DISTINCT col, ', ')

Thanks to Tom Lane for identifying the breaking commit.

Bug: #18264
Reported-by: Vojtěch Beneš
Discussion: https://postgr.es/m/18264-e363593d7e9feb7d@postgresql.org
Backpatch-through: 16, where 1349d2790 was added

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ae69c4fcf1337af399a788ab8d96af540bd1cd8e

Modified Files
--------------
src/backend/executor/execExprInterp.c    | 20 +++++++++++++++++---
src/test/regress/expected/aggregates.out | 13 +++++++++++++
src/test/regress/sql/aggregates.sql      |  9 +++++++++
3 files changed, 39 insertions(+), 3 deletions(-)



view thread (2+ messages)  latest in thread

Message-ID: <E1rLIKc-00DQ7h-5F@gemulon.postgresql.org>
Permalink:  ../E1rLIKc-00DQ7h-5F@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1rLIKc-00DQ7h-5F@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: drowley@postgresql.org, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Fix use of incorrect TupleTableSlot in DISTINCT aggregates
  In-Reply-To: <E1rLIKc-00DQ7h-5F@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox