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)