diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c
index 1bfa29e..6bf36ff 100644
--- a/src/backend/utils/adt/numeric.c
+++ b/src/backend/utils/adt/numeric.c
@@ -2000,7 +2000,13 @@ numeric_eq(PG_FUNCTION_ARGS)
 	Numeric		num2 = PG_GETARG_NUMERIC(1);
 	bool		result;
 
-	result = cmp_numerics(num1, num2) == 0;
+	if (VARSIZE(num1) == VARSIZE(num2) && NUMERIC_IS_SHORT(num1) &&
+		num1->choice.n_header == num2->choice.n_header)
+		result = memcmp(num1->choice.n_short.n_data,
+						num2->choice.n_short.n_data,
+						VARSIZE(num1) - NUMERIC_HDRSZ_SHORT) == 0;
+	else
+		result = cmp_numerics(num1, num2) == 0;
 
 	PG_FREE_IF_COPY(num1, 0);
 	PG_FREE_IF_COPY(num2, 1);
