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);