postgresql/contrib
Tom Lane 54b1cb7eb7 Fix results of index-only scans on btree_gist char(N) indexes.
If contrib/btree_gist is used to make a GIST index on a char(N)
(bpchar) column, and that column is retrieved via an index-only
scan, what came out had all trailing spaces removed.  Since
that doesn't happen in any other kind of table scan, this is
clearly a bug.  The cause is that gbt_bpchar_compress() strips
trailing spaces (using rtrim1) before a new index entry is made.
That was probably a good idea when this code was first written,
but since we invented index-only scans, it's not so good.

One answer could be to mark this opclass as incapable of index-only
scans.  But to do so, we'd need an extension module version bump,
followed by manual action by DBAs to install the updated version
of btree_gist.  And it's not really a desirable place to end up,
anyway.

Instead, let's fix the code by removing the unwanted space-stripping
action and adjusting the opclass's comparison logic to ignore
trailing spaces as bpchar normally does.  This will not hinder
cases that work today, since index searches with this logic will
act the same whether trailing spaces are stored or not.  It will
not by itself fix the problem of getting space-stripped results
from index-only scans, of course.  Users who care about that can
REINDEX affected indexes after installing this update, to immediately
replace all improperly-truncated index entries.  Otherwise, it can
be expected that the index's behavior will change incrementally as
old entries are replaced by new ones.

Per report from Alexander Lakhin.  Back-patch to all supported branches.

Discussion: https://postgr.es/m/696c995b-b37f-5526-f45d-04abe713179f@gmail.com
2022-01-08 14:54:39 -05:00
..
adminpack Update copyright for 2022 2022-01-07 19:04:57 -05:00
amcheck Update copyright for 2022 2022-01-07 19:04:57 -05:00
auth_delay Update copyright for 2022 2022-01-07 19:04:57 -05:00
auto_explain Update copyright for 2022 2022-01-07 19:04:57 -05:00
bloom Update copyright for 2022 2022-01-07 19:04:57 -05:00
bool_plperl
btree_gin
btree_gist Fix results of index-only scans on btree_gist char(N) indexes. 2022-01-08 14:54:39 -05:00
citext Enable routine running of citext's UTF8-specific test cases. 2022-01-05 13:30:07 -05:00
cube
dblink Update copyright for 2022 2022-01-07 19:04:57 -05:00
dict_int Update copyright for 2022 2022-01-07 19:04:57 -05:00
dict_xsyn Update copyright for 2022 2022-01-07 19:04:57 -05:00
earthdistance
file_fdw Update copyright for 2022 2022-01-07 19:04:57 -05:00
fuzzystrmatch Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore Update copyright for 2022 2022-01-07 19:04:57 -05:00
hstore_plperl
hstore_plpython
intagg
intarray Update copyright for 2022 2022-01-07 19:04:57 -05:00
isn Update copyright for 2022 2022-01-07 19:04:57 -05:00
jsonb_plperl
jsonb_plpython
lo
ltree Clean up more code using "(expr) ? true : false" 2021-10-11 09:36:42 +09:00
ltree_plpython
oid2name Update copyright for 2022 2022-01-07 19:04:57 -05:00
old_snapshot Update copyright for 2022 2022-01-07 19:04:57 -05:00
pageinspect Update copyright for 2022 2022-01-07 19:04:57 -05:00
passwordcheck Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_buffercache
pg_freespacemap
pg_prewarm Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_stat_statements Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_surgery Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_trgm Update copyright for 2022 2022-01-07 19:04:57 -05:00
pg_visibility Update copyright for 2022 2022-01-07 19:04:57 -05:00
pgcrypto pgcrypto: Remove explicit hex encoding/decoding from tests 2021-12-08 06:06:22 +01:00
pgrowlocks pgrowlocks: Fix incorrect format placeholders 2021-12-08 09:32:16 +01:00
pgstattuple Update copyright for 2022 2022-01-07 19:04:57 -05:00
postgres_fdw Update copyright for 2022 2022-01-07 19:04:57 -05:00
seg Update copyright for 2022 2022-01-07 19:04:57 -05:00
sepgsql Update copyright for 2022 2022-01-07 19:04:57 -05:00
spi
sslinfo contrib/sslinfo needs a fix too to make hamerkop happy. 2021-11-07 11:33:53 -05:00
start-scripts
tablefunc Update copyright for 2022 2022-01-07 19:04:57 -05:00
tcn Update copyright for 2022 2022-01-07 19:04:57 -05:00
test_decoding Update copyright for 2022 2022-01-07 19:04:57 -05:00
tsm_system_rows Update copyright for 2022 2022-01-07 19:04:57 -05:00
tsm_system_time Update copyright for 2022 2022-01-07 19:04:57 -05:00
unaccent Update copyright for 2022 2022-01-07 19:04:57 -05:00
uuid-ossp Update copyright for 2022 2022-01-07 19:04:57 -05:00
vacuumlo Update copyright for 2022 2022-01-07 19:04:57 -05:00
xml2
contrib-global.mk
Makefile pgcrypto: Remove non-OpenSSL support 2021-11-05 14:06:59 +01:00
README

The PostgreSQL contrib tree
---------------------------

This subtree contains porting tools, analysis utilities, and plug-in
features that are not part of the core PostgreSQL system, mainly
because they address a limited audience or are too experimental to be
part of the main source tree.  This does not preclude their
usefulness.

User documentation for each module appears in the main SGML
documentation.

When building from the source distribution, these modules are not
built automatically, unless you build the "world" target.  You can
also build and install them all by running "make all" and "make
install" in this directory; or to build and install just one selected
module, do the same in that module's subdirectory.

Some directories supply new user-defined functions, operators, or
types.  To make use of one of these modules, after you have installed
the code you need to register the new SQL objects in the database
system by executing a CREATE EXTENSION command.  In a fresh database,
you can simply do

    CREATE EXTENSION module_name;

See the PostgreSQL documentation for more information about this
procedure.