Re: making the backend's json parser work in frontend code - Mailing list pgsql-hackers

From Mark Dilger
Subject Re: making the backend's json parser work in frontend code
Date
Msg-id 48F5C477-932C-4DB7-B4F6-C46F6D5AEF36@enterprisedb.com
Whole thread Raw
In response to Re: making the backend's json parser work in frontend code  (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>)
List pgsql-hackers

> On Jan 23, 2020, at 4:27 PM, Andrew Dunstan <andrew.dunstan@2ndquadrant.com> wrote:
>
> On Fri, Jan 24, 2020 at 7:35 AM Mark Dilger
> <mark.dilger@enterprisedb.com> wrote:
>>
>>
>>> On Jan 22, 2020, at 7:00 PM, Mark Dilger <mark.dilger@enterprisedb.com> wrote:
>>>
>>> I have this done in my local repo to the point that I can build frontend tools against the json parser that is now
insrc/common and also run all the check-world tests without failure.  I’m planning to post my work soon, possibly
tonightif I don’t run out of time, but more likely tomorrow. 
>>
>> Ok, I finished merging with Robert’s patches.  The attached follow his numbering, with my patches intended to by
appliedafter his. 
>>
>> I tried not to change his work too much, but I did a bit of refactoring in 0010, as explained in the commit comment.
>>
>> 0011 is just for verifying the linking works ok and the json parser can be invoked from a frontend tool without
error— I don’t really see the point in committing it. 
>>
>> I ran some benchmarks for json parsing in the backend both before and after these patches, with very slight changes
inruntime.  The setup for the benchmark creates an unlogged table with a single text column and loads rows of json
formattedtext: 
>>
>> CREATE UNLOGGED TABLE benchmark (
>>    j text
>> );
>> COPY benchmark (j) FROM '/Users/mark.dilger/bench/json.csv’;
>>
>>
>> FYI:
>>
>> wc ~/bench/json.csv
>>     107 34465023 503364244 /Users/mark.dilger/bench/json.csv
>>
>> The benchmark itself casts the text column to jsonb, as follows:
>>
>> SELECT jsonb_typeof(j::jsonb) typ, COUNT(*) FROM benchmark GROUP BY typ;
>>
>> In summary, the times are:
>>
>>        pristine        patched
>>        —————   —————
>>        11.985  12.237
>>        12.200  11.992
>>        11.691  11.896
>>        11.847  11.833
>>        11.722  11.936
>>
>
> OK, nothing noticeable there.
>
> "accept" is a common utility I've used in the past with parsers of
> this kind, but inlining it seems perfectly reasonable.
>
> I've reviewed these patches and Robert's, and they seem basically good to me.

Thanks for the review!

> But I don't think src/bin is the right place for the test program. I
> assume we're not going to ship this program, so it really belongs in
> src/test somewhere, I think. It should also have a TAP test.

Ok, I’ll go do that; thanks for the suggestion.


—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company






pgsql-hackers by date:

Previous
From: Michail Nikolaev
Date:
Subject: Re: Thoughts on "killed tuples" index hint bits support on standby
Next
From: Amit Langote
Date:
Subject: Re: progress report for ANALYZE