From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix erroneous hash calculations in gin_extract_jsonb_path(). |
Date: | 2015-11-05 23:16:01 |
Message-ID: | E1ZuTlB-0000r1-Ot@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/b23af458755ed90ae9164857e59d034bad75a672
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(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2015-11-06 05:32:05 | pgsql: Document interaction of bgworkers with LISTEN/NOTIFY. |
Previous Message | Tom Lane | 2015-11-05 18:52:59 | pgsql: Fix memory leaks in PL/Python. |