Re: Extract numeric filed in JSONB more effectively
Andy Fan <zhihuifan1213@163.com>
From: Andy Fan <zhihuifan1213@163.com>
To: Haibo Yan <tristan.yim@gmail.com>
Cc: Dmitry Dolgov <9erthalion6@gmail.com>, David Rowley
<dgrowleyml@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, Amit
Langote <amitlangote09@gmail.com>, Alvaro Herrera
<alvherre@alvh.no-ip.org>, jian he <jian.universality@gmail.com>,
Chapman Flack <chap@anastigmatix.net>,
pgsql-hackers@lists.postgresql.org
Date: 2026-04-07T06:13:35Z
Lists: pgsql-hackers
Hi Haibo, > I’d like to continue pushing this patch forward. > Based on the earlier discussion, I reworked the patch into a smaller > stage-1 version with a narrower scope and a simpler rewrite > strategy. .. > and does not yet try to cover array/path extraction or integer/float > typed extractors. Thanks for working on this. I did a quick comparison between this version and my last patch v18 [1], here is the difference. My previous v18[1]: 542 insertions(+), 59 deletions(-) Your patch: 543 insertions(+), 5 deletions(-) However as what you have realized, your current patch still lack of many optimizations, Not only the integer/float stuff, but also many functions, e.g. jsonb_array_element, jsonb_extract_path, jsonb_path_query and jsonb_path_query_first. After considering this, what patch will look like in your approach? I guess you can see many duplications. Less code doesn't always mean better, but I think this still be a key consideration to address/check. > I also ran a small microbenchmark to isolate the cast-over-object-field path. On my setup, the current patch shows the following gains: > Query Before After Speedup > -------------------------------------------------------------------------------- > SELECT sum((j->'n')::numeric) FROM t 118.028 ms 56.082 ms 2.10x > SELECT count(*) FROM t WHERE (j->'b')::bool 115.665 ms 51.945 ms 2.23x > -------------------------------------------------------------------------------- Thanks for running the test. [1] https://www.postgresql.org/message-id/87ttk0lgcx.fsf%40163.com -- Best Regards Andy Fan
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add trailing commas to enum definitions
- 611806cd726f 17.0 cited