Re: Making jsonb_agg() faster
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Chao Li <li.evan.chao@gmail.com>
Cc: jian he <jian.universality@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-12-06T19:00:48Z
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
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.) regards, tom lane