diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index eea4239854..5f23f2afac 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -2946,6 +2946,10 @@ numeric_fac(PG_FUNCTION_ARGS) NumericVar fact; NumericVar result; + if (num < 0) + ereport(ERROR, + (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), + errmsg("factorial of a negative number is undefined"))); if (num <= 1) { res = make_result(&const_one); diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out index b255be7c85..2f3ecb50a7 100644 --- a/src/test/regress/expected/numeric.out +++ b/src/test/regress/expected/numeric.out @@ -2345,14 +2345,6 @@ SELECT 0!; (1 row) SELECT -4!; - ?column? ----------- - 1 -(1 row) - +ERROR: factorial of a negative number is undefined SELECT factorial(-4); - factorial ------------ - 1 -(1 row) - +ERROR: factorial of a negative number is undefined