Re: Extract numeric filed in JSONB more effectively
От | jian he |
---|---|
Тема | Re: Extract numeric filed in JSONB more effectively |
Дата | |
Msg-id | CACJufxGpK0hbshRGNP2=KK+_N8DpXmUuEdcMWTczsq6MFX0ZVw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Extract numeric filed in JSONB more effectively (Matthias van de Meent <boekewurm+postgres@gmail.com>) |
Ответы |
Re: Extract numeric filed in JSONB more effectively
|
Список | pgsql-hackers |
On Thu, Aug 3, 2023 at 6:04 PM Matthias van de Meent <boekewurm+postgres@gmail.com> wrote: > > > Is it? Detoasting only happens if the argument was toasted, and I have > serious doubts that the result of (a->'a') will be toasted in our > current system. Sure, we do need to allocate an intermediate result, > but that's in a temporary memory context that should be trivially > cheap to free. > > > /* > > * v.val.numeric points into jsonb body, so we need to make a copy to > > * return > > */ > > retValue = DatumGetNumericCopy(NumericGetDatum(v.val.numeric)); > > > > At last this method needs 1 extra FuncExpr than my method, this would > > cost some expression execution effort. I'm not saying we need to avoid > > expression execution generally, but extracting numeric fields from jsonb > > looks a reasonable case. > > What's tb here? > > > Kind regards, > > Matthias van de Meent > Neon (https://neon.tech) > > can confirm the patch's jsonb_object_field_numeric is faster than pg_catalog."numeric"(jsonb). also it works accurately either jsonb is in the page or in toast schema chunks. I don't understand why we need to allocate an intermediate result part. since you cannot directly update a jsonb value field. This function is not easy to find out... select numeric('{"a":11}'->'a'); --fail. select jsonb_numeric(jsonb'{"a":11}'->'a'); --fail select "numeric"('{"a":11}'::jsonb->'a'); --ok
В списке pgsql-hackers по дате отправления: