Re: [HACKERS] Why no jsonb_exists_path()?

2015-06-10 Thread Alexander Korotkov
Josh,

On Tue, Jun 9, 2015 at 9:16 PM, Josh Berkus j...@agliodbs.com wrote:

 Dmitry, Alexander:

 I'm noticing a feature gap for JSONB operators; we have no way to do this:

 jsonb_col ? ARRAY['key1','key2','key3']


What documents do you expect to match this operator?
Such syntax can be interpreted in very different semantics. Checking keys
only at top level, any level, sequence starting from top level ... etc.

'{key1: value1, key2: value2, key3: value3}'
'{key1:{ key2: {key3: value}}}'
'{key1: value1}
'[{key1: value1}, {key2: value2}, {key3: value3}]'

--
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


[HACKERS] Why no jsonb_exists_path()?

2015-06-09 Thread Josh Berkus
Dmitry, Alexander:

I'm noticing a feature gap for JSONB operators; we have no way to do this:

jsonb_col ? ARRAY['key1','key2','key3']

... that is, there is no way for us to check for key existence in an
indexable fashion.  Given that @ already can check the whole path
including the value, is there some challenge to stopping just short of
the value I'm not seeing?  Or is this just a didn't get to it yet issue?

I'm trying to estimate the difficulty of creating this operator in an
extension (obviously we're not doing it for 9.5), and maybe for 9.6.

-- 
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Why no jsonb_exists_path()?

2015-06-09 Thread Tom Lane
Josh Berkus j...@agliodbs.com writes:
 I'm noticing a feature gap for JSONB operators; we have no way to do this:

 jsonb_col ? ARRAY['key1','key2','key3']

 ... that is, there is no way for us to check for key existence in an
 indexable fashion.  Given that @ already can check the whole path
 including the value, is there some challenge to stopping just short of
 the value I'm not seeing?  Or is this just a didn't get to it yet issue?

Hm, well, the jsonb_path_ops opclass couldn't do it, because what it
indexes is hashes that include the value.  I suppose jsonb_ops could
look for entries that match all of the keys and then see if the ordering
is correct.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Why no jsonb_exists_path()?

2015-06-09 Thread Andrew Dunstan


On 06/09/2015 05:30 PM, Andrew Dunstan wrote:


On 06/09/2015 02:40 PM, Tom Lane wrote:

Josh Berkus j...@agliodbs.com writes:
I'm noticing a feature gap for JSONB operators; we have no way to do 
this:

jsonb_col ? ARRAY['key1','key2','key3']
... that is, there is no way for us to check for key existence in an
indexable fashion.  Given that @ already can check the whole path
including the value, is there some challenge to stopping just short of
the value I'm not seeing?  Or is this just a didn't get to it yet 
issue?

Hm, well, the jsonb_path_ops opclass couldn't do it, because what it
indexes is hashes that include the value.  I suppose jsonb_ops could
look for entries that match all of the keys and then see if the ordering
is correct.





It looks to me like we'd need to index all paths in a document, or 
possibly hashes of all paths in a document. I don't think anything we 
have now will help much, unless my understanding is way off.






On second thought, yes, we could possibly check the index against the 
path elements and then recheck.



cheers

andrew




--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Why no jsonb_exists_path()?

2015-06-09 Thread Andrew Dunstan


On 06/09/2015 02:40 PM, Tom Lane wrote:

Josh Berkus j...@agliodbs.com writes:

I'm noticing a feature gap for JSONB operators; we have no way to do this:
jsonb_col ? ARRAY['key1','key2','key3']
... that is, there is no way for us to check for key existence in an
indexable fashion.  Given that @ already can check the whole path
including the value, is there some challenge to stopping just short of
the value I'm not seeing?  Or is this just a didn't get to it yet issue?

Hm, well, the jsonb_path_ops opclass couldn't do it, because what it
indexes is hashes that include the value.  I suppose jsonb_ops could
look for entries that match all of the keys and then see if the ordering
is correct.





It looks to me like we'd need to index all paths in a document, or 
possibly hashes of all paths in a document. I don't think anything we 
have now will help much, unless my understanding is way off.


cheers

andrew


--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers