Re: Making jsonb_agg() faster
Chao Li <li.evan.chao@gmail.com>
From: Chao Li <li.evan.chao@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: jian he <jian.universality@gmail.com>,
pgsql-hackers@lists.postgresql.org
Date: 2025-12-07T00:13:42Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix jsonb_object_agg crash after eliminating null-valued pairs.
- ef5f559b95e2 19 (unreleased) landed
-
Micro-optimize datatype conversions in datum_to_jsonb_internal.
- 005a2907dc30 19 (unreleased) landed
-
Remove fundamentally-redundant processing in jsonb_agg() et al.
- b61aa76e4585 19 (unreleased) landed
-
Revise APIs for pushJsonbValue() and associated routines.
- 0986e95161ce 19 (unreleased) landed
-
Add a macro for the declared typlen of type timetz.
- 3628af42107d 19 (unreleased) landed
> On Dec 7, 2025, at 03:00, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Chao Li <li.evan.chao@gmail.com> writes: >> On Dec 6, 2025, at 07:14, Tom Lane <tgl@sss.pgh.pa.us> wrote: >>> I'd kind of like to get this pushed soon, because it keeps getting >>> sideswiped ... does anyone have further comments? > >> My only nit commit is still about the hard-coded 12: >> I commented this before and you explained. But I still think it may deserve a comment for why 12 is here, otherwise future reader may also get the same confusion as when I first time read this code. > > I've been thinking of that as an independent issue. But what I'm > inclined to do is add a symbol to date.h, say like > > diff --git a/src/include/utils/date.h b/src/include/utils/date.h > index 7316ac0ff17..2aca785b65d 100644 > --- a/src/include/utils/date.h > +++ b/src/include/utils/date.h > @@ -30,6 +30,14 @@ typedef struct > int32 zone; /* numeric time zone, in seconds */ > } TimeTzADT; > > +/* > + * sizeof(TimeTzADT) will be 16 on most platforms due to alignment padding. > + * However, timetz's typlen is 12 according to pg_type. In most places > + * we can get away with using sizeof(TimeTzADT), but where it's important > + * to match the declared typlen, use TIMETZ_TYPLEN. > + */ > +#define TIMETZ_TYPLEN 12 > + > /* > * Infinity and minus infinity must be the max and min values of DateADT. > */ > > and then use that. (I poked around in other code using TimeTzADT, > and could not find any other places where we have hard-wired "12", > which seems a bit surprising perhaps. But pretty much all the > references to sizeof(TimeTzADT) are in palloc's, where it's fine.) That’s even better than resolving my comment. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/