Re: jsonb and nested hstore - Mailing list pgsql-hackers

From Alexander Korotkov
Subject Re: jsonb and nested hstore
Date
Msg-id CAPpHfdvjr9KXprvj_A14P=m=S1uBQkDXnDvaGDKa7oVQjdRM3w@mail.gmail.com
Whole thread Raw
In response to Re: jsonb and nested hstore  (Peter Geoghegan <pg@heroku.com>)
List pgsql-hackers
On Tue, Mar 11, 2014 at 5:19 AM, Peter Geoghegan <pg@heroku.com> wrote:
On Mon, Mar 10, 2014 at 4:19 AM, Alexander Korotkov
<aekorotkov@gmail.com> wrote:
> Here it is.

So it looks like what you have here is analogous to the other problems
that I fixed with both GiST and GIN. That isn't surprising, and this
does fix my test-case. I'm not terribly happy about the lack of
explanation for the hashing in that loop, though. Why use COMP_CRC32()
at all, for one thing?

Why do this for non-primitive jsonb hashing?

COMP_CRC32(stack->hash_state, PATH_SEPARATOR, 1);

Where PATH_SEPARATOR is:

#define PATH_SEPARATOR ("\0")

Actually, come to think of it, why not just use one hashing function
everywhere? i.e., jsonb_hash(PG_FUNCTION_ARGS)? It's already very
similar. Pretty much every hash operator support function 1 (i.e. a
particular type's hash function) is implemented with hash_any(). Can't
we just do the same here? In any case it isn't obvious why the
requirements for those two things (the hashing mechanism used by the
jsonb_hash_ops GIN opclass, and the hash operator class support
function 1 hash function) cannot be the same thing.

It's because CRC32 interface allows incremental calculation while hash_any requires single chunk of memory. I don't think that unfolding everything is good idea. But we could implement incremental interface for hash_any.

------
With best regards,
Alexander Korotkov. 

pgsql-hackers by date:

Previous
From: Etsuro Fujita
Date:
Subject: Re: inherit support for foreign tables
Next
From: Amit Kapila
Date:
Subject: Re: Patch: show relation and tuple infos of a lock to acquire