Thread

  1. Using vars in jsonbpath operator ?

    Markur Sens <markursens@gmail.com> — 2023-06-16T11:54:35Z

    I understand that on a where clause a gin index can be used for the following predicate
    
    a.data @? '$.results.docs[*].accs[*] ? (@.id == “123")
    
    I have a join query however on the following condition
    
    jsonb_path_exists(a.data, '$.results.docs[*].accs[*] ? (@.number == $id)', jsonb_build_object(‘id', b.id))  but this cannot use a gin index afaik and results in a seq scan.
    
    Is there anyway to use the operator syntax above by passing the b.id <http://b.id/> variable somwehow so that the gin index can be used ? ? 
    
    
    
    
    
  2. Re: Using vars in jsonbpath operator ?

    shammat@gmx.net — 2023-06-16T13:24:54Z

    
    Markur Sens schrieb am 16.06.2023 um 13:54:
    > I understand that on a where clause a gin index can be used for the following predicate
    >
    > a.data @? '$.results.docs[*].accs[*] ? (@.id == “123")
    >
    > I have a join query however on the following condition
    >
    > jsonb_path_exists(a.data, '$.results.docs[*].accs[*] ? (@.number == $id)', jsonb_build_object(‘id', *b.id*))  but this cannot use a gin index afaik and results in a seq scan.
    >
    > Is there anyway to use the operator syntax above by passing the b.id <http://b.id> variable somwehow so that the gin index can be used ? ? 
    >
    
    I think you will need to pass the whole jsonpath as a parameter, e.g.
    
    
        a.data @? cast($1 as jsonpath)
    
    
    At least that's the only way I could achieve this