diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 16acafe..3516274 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -1111,6 +1111,16 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list)
 				var = (Var *) get_leftop(rinfo->clause);
 
 			/*
+			 * Ignore any RelabelType node above the operand.   This is needed
+			 * to be able to apply indexscanning in binary-compatible-operator
+			 * cases. Note: we can assume there is at most one RelabelType
+			 * node; eval_const_expressions() will have simplified if more
+			 * than one.
+			 */
+			if (var && IsA(var, RelabelType))
+				var = (Var *) ((RelabelType *) var)->arg;
+
+			/*
 			 * If inner side isn't a Var referencing a subquery output column,
 			 * this clause doesn't help us.
 			 */
