pgsql: Fix SP-GiST scan initialization logic for binary-compatible case

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix SP-GiST scan initialization logic for binary-compatible case
Date: 2021-11-20 19:30:05
Message-ID: E1moW3p-00013h-52@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix SP-GiST scan initialization logic for binary-compatible cases.

Commit ac9099fc1 rearranged the logic in spgGetCache() that determines
the index's attType (nominal input data type) and leafType (actual
type stored in leaf index tuples). Turns out this broke things for
the case where (a) the actual input data type is different from the
nominal type, (b) the opclass's config function leaves leafType
defaulted, and (c) the opclass has no "compress" function. (b) caused
us to assign the actual input data type as leafType, and then since
that's not attType, we complained that a "compress" function is
required. For non-polymorphic opclasses, condition (a) arises in
binary-compatible cases, such as using SP-GiST text_ops for a varchar
column, or using any opclass on a domain over its nominal input type.

To fix, use attType for leafType when the index's declared column type
is different from but binary-compatible with attType. Do this only in
the defaulted-leafType case, to avoid overriding any explicit
selection made by the opclass.

Per bug #17294 from Ilya Anfimov. Back-patch to v14.

Discussion: https://postgr.es/m/17294-8f6c7962ce877edc@postgresql.org

Branch
------
master

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

Modified Files
--------------
src/backend/access/spgist/spgutils.c | 12 ++++++++++++
src/test/regress/expected/spgist.out | 21 +++++++++++++++++++++
src/test/regress/sql/spgist.sql | 9 +++++++++
3 files changed, 42 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Andrew Dunstan 2021-11-20 22:56:22 pgsql: Require version 0.98 of Test::More for TAP tests
Previous Message Tom Lane 2021-11-19 17:11:54 pgsql: Allow psql's other uses of simple_prompt() to be interrupted by