Re: Making jsonb_agg() faster

From: jian he <jian(dot)universality(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Making jsonb_agg() faster
Date: 2025-08-14 09:41:33
Message-ID: CACJufxGFzbRDnyG-=WZ3RgkVUwOZexUobGDrA3n5bj8MxrAZvQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Aug 14, 2025 at 4:59 PM jian he <jian(dot)universality(at)gmail(dot)com> wrote:
>
> > 0001 is a somewhat invasive refactoring of the API for
> > pushJsonbValue and friends.

in pushJsonbValue:

/*
* pushJsonbValueScalar handles all cases not involving pushing a
* container object as an ELEM or VALUE.
*/
if (!jbval || (seq != WJB_ELEM && seq != WJB_VALUE))
{
pushJsonbValueScalar(pstate, seq, jbval);
return;
}
/* If it's not a jbvBinary value, again it goes to pushJsonbValueScalar */
if (jbval->type != jbvBinary)
{
pushJsonbValueScalar(pstate, seq, jbval);
return;
}

we can combine above these two into
if (!jbval || (seq != WJB_ELEM && seq != WJB_VALUE) ||
IsAJsonbScalar(jbval))
{
pushJsonbValueScalar(pstate, seq, jbval);
return;
}
and put it in the earlier position of pushJsonbValue.

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Álvaro Herrera 2025-08-14 09:57:13 Re: ALTER DOMAIN ADD NOT NULL NOT VALID
Previous Message Álvaro Herrera 2025-08-14 09:29:08 Re: Remove Instruction Synchronization Barrier in spin_delay() for ARM64 architecture