Re: SQL/JSON: JSON_TABLE

From: Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru>
To: Erik Rijkers <er(at)xs4all(dot)nl>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, David Steele <david(at)pgmasters(dot)net>, Michael Paquier <michael(at)paquier(dot)xyz>, Justin Pryzby <pryzby(at)telsasoft(dot)com>, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Dmitry Dolgov <9erthalion6(at)gmail(dot)com>, Oleg Bartunov <obartunov(at)gmail(dot)com>, Andrew Dunstan <andrew(dot)dunstan(at)2ndquadrant(dot)com>, Zhihong Yu <zyu(at)yugabyte(dot)com>
Subject: Re: SQL/JSON: JSON_TABLE
Date: 2021-03-30 20:25:10
Message-ID: 69eefc5a-cabc-8dd3-c689-93da038c0d6a@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 30.03.2021 19:56, Erik Rijkers wrote:

>> On 2021.03.27. 02:12 Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru> wrote:
>>
>> Attached 47th version of the patches.
> Hi,
>
> Apply, build all fine. It also works quite well, and according to specification, as far as I can tell.
>
> But today I ran into:
>
> ERROR: function ExecEvalJson not in llvmjit_types.c
>
> I think that it is caused by:
>
> set enable_bitmapscan = off;
>
> (I installed llvm a few days ago. llvm-3.9-dev on this debian stretch).
>
>
> This is the test sql I concocted, which runs fine with enable_bitmapscan on (the default):
>
> select jt1.*
> from myjsonfile100k as t(js, id)
> , json_table(
> t.js
> , '$' columns (
> "lastname" text path '$. "lastname" '
> , "firstname" text path '$. "firstname" '
> , "date" text path '$. "date" '
> , "city" text path '$. "city" '
> , "country" text path '$. "country" '
> , "name 0(1)" text path '$. "array"[0] '
> , "name 4(5)" text path '$. "array"[4] '
> , "names" text[] path '$. "array" '
> , "randfloat" float path '$. "random float" '
> )
> ) as jt1
> where js @> ('[ { "city": "Santiago de Cuba" } ]')
> and js[0]->>'firstname' = 'Gilda'
> ;
> ERROR: function ExecEvalJson not in llvmjit_types.c
>
> That statement only errors out if the table is large enough. I have no time now to make a sample table but if no-one understands the problem off-hand, I'll try to construct such a table later this week (the one I'm using is large, 1.5 GB).

Thank you for testing.

I think you can try to add 3 missing functions references to the end of
src/backend/jit/llvm/llvmjit_types.c:

 void       *referenced_functions[] =
{
     ...
     ExecEvalXmlExpr,
+    ExecEvalJsonConstructor,
+    ExecEvalIsJsonPredicate,
+    ExecEvalJson,
     MakeExpandedObjectReadOnlyInternal,
     ...
};

If this fixes problem, I will add this to the new version of the patches.

--
Nikita Glukhov
Postgres Professional:http://www.postgrespro.co <http://www.postgrespro.com>The Russian Postgres Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Thomas Munro 2021-03-30 21:00:02 Re: Remove page-read callback from XLogReaderState.
Previous Message Joe Conway 2021-03-30 20:20:39 Re: "has_column_privilege()" issue with attnums and non-existent columns