When a numeric is compared to a literal < 2^31 - 1 it works
well, but compared to a greater literal, it is casted to double
precision. Why? How can I correct this without explicit cast?
db=> \d tipos
Table "tipos"
Column | Type | Modifiers
-----------+---------+-----------
_numeric_ | numeric |
_decimal_ | numeric |
db=> select * from tipos where _numeric_ <= 2147483648;
ERROR: Unable to identify an operator '<=' for types 'numeric' and
'double precision'
You will have to retype this query using an explicit cast
db=> select * from tipos where _numeric_ <= 2147483647;
_numeric_ | _decimal_
-----------+-----------
10 | 20
(1 row)