Обсуждение: numeric when compared to literal

Поиск
Список
Период
Сортировка

numeric when compared to literal

От
Vicente Alabau Gonzalvo
Дата:
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)




Re: numeric when compared to literal

От
Tom Lane
Дата:
Vicente Alabau Gonzalvo <vicente.alabau-gonzalvo@cgey.com> writes:
> db=> select * from tipos where _numeric_ <= 2147483648;
> ERROR:  Unable to identify an operator '<=' for types 'numeric' and 
> 'double precision'

7.3 is more forgiving about this (although there's no free lunch ---
some other cases are now less forgiving).
        regards, tom lane