diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c
index f7e78fa105..c243605277 100644
--- a/src/backend/utils/adt/cash.c
+++ b/src/backend/utils/adt/cash.c
@@ -351,6 +351,11 @@ cash_out(PG_FUNCTION_ARGS)
 
 	if (value < 0)
 	{
+		if (value == LONG_MIN)
+			ereport(ERROR,
+					(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+					 errmsg("out of range for type money")));
+
 		/* make the amount positive for digit-reconstruction loop */
 		value = -value;
 		/* set up formatting data */
