+
+
Absolute-Value and Factorial Operator Type Resolution
+
+The
PostgreSQL operator catalog has several
+entries for the prefix operator @>, all of which implement
+absolute-value operations for various numeric data types. One of these
+entries is for type float8, which is the preferred type in
+the numeric category. Therefore,
PostgreSQL
+will use that entry when faced with a non-numeric input:
+
+SELECT @ '-4.5' AS "abs";
+ abs
+-----
+ 4.5
+(1 row)
+
+Here the system has performed an implicit conversion from text to float8
+before applying the chosen operator. We can verify that float8 and
+not some other type was used:
+
+SELECT @ '-4.5e500' AS "abs";
+
+ERROR: Input '-4.5e500' is out of range for float8
+
+
+
+On the other hand, the postfix operator !> (factorial)
+is defined only for integer data types, not for float8. So, if we
+try a similar case with !>, we get:
+
+SELECT '20' ! AS "factorial";
+
+ERROR: Unable to identify a postfix operator '!' for type 'text'
+ You may need to add parentheses or an explicit cast
+
+This happens because the system can't decide which of the several
+possible !> operators should be preferred. We can help
+it out with an explicit cast:
+
+SELECT CAST('20' AS int8) ! AS "factorial";
+
+ factorial
+---------------------
+ 2432902008176640000
+(1 row)
+
+
+
+