pgsql: Fix handling of NaN values in BRIN minmax multi

From: Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix handling of NaN values in BRIN minmax multi
Date: 2021-11-06 00:53:13
Message-ID: E1mj9xJ-0003Rq-Vg@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix handling of NaN values in BRIN minmax multi

When calculating distance between float4/float8 values, we need to be a
bit more careful about NaN values in order not to trigger assert. We
consider NaN values to be equal (distace 0.0) and in infinite distance
from all other values.

On builds without asserts, this issue is mostly harmless - the ranges
may be merged in less efficient order, but the index is still correct.

Per report from Andreas Seltenreich. Backpatch to 14, where this new
BRIN opclass was introduced.

Reported-by: Andreas Seltenreich
Discussion: https://postgr.es/m/87r1bw9ukm.fsf@credativ.de

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d91353f4b21f10417d142e6ac17a0490adae867c

Modified Files
--------------
src/backend/access/brin/brin_minmax_multi.c | 17 +++++++++++++++++
src/test/regress/expected/brin_multi.out | 3 +++
src/test/regress/sql/brin_multi.sql | 4 ++++
3 files changed, 24 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tomas Vondra 2021-11-06 00:55:28 pgsql: Fix handling of NaN values in BRIN minmax multi
Previous Message Tom Lane 2021-11-06 00:26:27 pgsql: First-draft release notes for 14.1.