From 55b59eda13a742f8af913734e22ecc8a21754414 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 26 Mar 2015 23:07:52 +0200 Subject: Fix GiST index-only scans for opclasses with different storage type. We cannot use the index's tuple descriptor directly to describe the index tuples returned in an index-only scan. That's because the index might use a different datatype for the values stored on disk than the type originally indexed. As long as they were both pass-by-ref, it worked, but will not work for pass-by-value types of different sizes. I noticed this as a crash when I started hacking a patch to add fetch methods to btree_gist. --- src/include/access/gist_private.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/include/access/gist_private.h') diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index 3693893e261..9d3714d27d2 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -78,6 +78,8 @@ typedef struct GISTSTATE MemoryContext tempCxt; /* short-term context for calling functions */ TupleDesc tupdesc; /* index's tuple descriptor */ + TupleDesc fetchTupdesc; /* tuple descriptor for tuples returned in an + * index-only scan */ FmgrInfo consistentFn[INDEX_MAX_KEYS]; FmgrInfo unionFn[INDEX_MAX_KEYS]; -- cgit v1.2.3