Return 0 for x % -1 instead of throwing an exception (e.g., when x
is INT_MIN).
Suggested by Tom Lane.
---src/backend/utils/adt/int8.c | 4 ++++1 file changed, 4 insertions(+)
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
index 0e59956..a30ab36 100644
--- a/src/backend/utils/adt/int8.c
+++ b/src/backend/utils/adt/int8.c
@@ -649,6 +649,10 @@ int8mod(PG_FUNCTION_ARGS) PG_RETURN_NULL(); }
+ /* SELECT ((-9223372036854775808)::int8) % (-1); causes a floating point exception */
+ if (arg2 == -1)
+ PG_RETURN_INT64(0);
+ /* No overflow is possible */ PG_RETURN_INT64(arg1 % arg2);
--
1.7.10.4