pgsql: Fix erroneous hash calculations in gin_extract_jsonb_path(). - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix erroneous hash calculations in gin_extract_jsonb_path().
Date
Msg-id E1ZuTlB-0000r4-PF@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix erroneous hash calculations in gin_extract_jsonb_path().

The jsonb_path_ops code calculated hash values inconsistently in some cases
involving nested arrays and objects.  This would result in queries possibly
not finding entries that they should find, when using a jsonb_path_ops GIN
index for the search.  The problem cases involve JSONB values that contain
both scalars and sub-objects at the same nesting level, for example an
array containing both scalars and sub-arrays.  To fix, reset the current
stack->hash after processing each value or sub-object, not before; and
don't try to be cute about the outermost level's initial hash.

Correcting this means that existing jsonb_path_ops indexes may now be
inconsistent with the new hash calculation code.  The symptom is the same
--- searches not finding entries they should find --- but the specific
rows affected are likely to be different.  Users will need to REINDEX
jsonb_path_ops indexes to make sure that all searches work as expected.

Per bug #13756 from Daniel Cheng.  Back-patch to 9.4 where the faulty
logic was introduced.

Branch
------
REL9_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/788e35ac0bc00489e2b86a930d8c1264100fb94b

Modified Files
--------------
src/backend/utils/adt/jsonb_gin.c   |   51 +++++++++++++----------------------
src/test/regress/expected/jsonb.out |   50 ++++++++++++++++++++++++++++++++++
src/test/regress/sql/jsonb.sql      |   20 ++++++++++++++
3 files changed, 88 insertions(+), 33 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Fix erroneous hash calculations in gin_extract_jsonb_path().
Next
From: Robert Haas
Date:
Subject: pgsql: Document interaction of bgworkers with LISTEN/NOTIFY.