From f84c8601d604811a530dadb53ddb52f08639e72b Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 23 May 2015 16:24:31 -0400
Subject: [PATCH] Add error check for lossy distance functions in index-only
 scans.

Maybe we should actually support this, but for the moment let's just
throw an error if the opclass tries it.
---
 src/backend/executor/nodeIndexonlyscan.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/backend/executor/nodeIndexonlyscan.c b/src/backend/executor/nodeIndexonlyscan.c
index 61bd644ab71..976c77b76c6 100644
--- a/src/backend/executor/nodeIndexonlyscan.c
+++ b/src/backend/executor/nodeIndexonlyscan.c
@@ -165,6 +165,19 @@ IndexOnlyNext(IndexOnlyScanState *node)
 			}
 		}
 
+		/*
+		 * We don't currently support rechecking ORDER BY distances.  (In
+		 * principle, if the index can support retrieval of the originally
+		 * indexed value, it should be able to produce an exact distance
+		 * calculation too.  So it's not clear that adding code here for
+		 * recheck/re-sort would be worth the trouble.  But we should at least
+		 * throw an error if someone tries it.)
+		 */
+		if (scandesc->numberOfOrderBys > 0 && scandesc->xs_recheckorderby)
+			ereport(ERROR,
+					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+					 errmsg("lossy distance functions are not supported in index-only scans")));
+
 		/*
 		 * Predicate locks for index-only scans must be acquired at the page
 		 * level when the heap is not accessed, since tuple-level predicate
-- 
GitLab