Index-only scan for btree_gist turns bpchar to char - Mailing list pgsql-hackers

From Alexander Lakhin
Subject Index-only scan for btree_gist turns bpchar to char
Date
Msg-id 696c995b-b37f-5526-f45d-04abe713179f@gmail.com
Whole thread Raw
Responses Re: Index-only scan for btree_gist turns bpchar to char
List pgsql-hackers
Hello hackers,

While testing the index-only scan fix, I've discovered that replacing
the index-only scan with the index scan changes contrib/btree_gist
output because index-only scan for btree_gist returns a string without
padding.
A simple demonstration (based on btree_gist/sql/char.sql):
CREATE EXTENSION btree_gist;

CREATE TABLE chartmp (a char(32));
INSERT INTO chartmp VALUES('31b0');

CREATE INDEX charidx ON chartmp USING gist ( a );
SET enable_seqscan=off;
EXPLAIN VERBOSE SELECT *, octet_length(a) FROM chartmp WHERE a BETWEEN
'31a' AND '31c';
SELECT *, octet_length(a) FROM chartmp WHERE a BETWEEN '31a' AND '31c';

SET enable_indexonlyscan=off;
EXPLAIN VERBOSE SELECT *, octet_length(a) FROM chartmp WHERE a BETWEEN
'31a' AND '31c';
SELECT *, octet_length(a) FROM chartmp WHERE a BETWEEN '31a' AND '31c';


                                  QUERY
PLAN                                 
------------------------------------------------------------------------------
 Index Only Scan using charidx on chartmp  (cost=0.12..8.15 rows=1
width=136)
   Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar))
(2 rows)

  a   | octet_length
------+--------------
 31b0 |            4
(1 row)


                               QUERY PLAN                               
-------------------------------------------------------------------------
 Index Scan using charidx on chartmp  (cost=0.12..8.15 rows=1 width=136)
   Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar))
(2 rows)

                a                 | octet_length
----------------------------------+--------------
 31b0                             |           32
(1 row)


It seems that loosing blank padding is incorrect (btree and btree_gin
preserve padding with index-only scan) but it's recorded in
contrib/btree_gist/expected/char.out.

Best regards,
Alexander



pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: SQL/JSON: functions
Next
From: Andrew Dunstan
Date:
Subject: Re: SQL/JSON: functions