Обсуждение: Bug with int2

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

Bug with int2

От
Feng Tian
Дата:
I run into the following.   Seems this is a bug for -32768, which should be a valid smallint value.

Test was run on 9.4.5.

Thanks,
Feng

ftian=# select 32767::int2;                                                                                                                                                                   
 int2  
-------
 32767
(1 row)

ftian=# select -32767::int2;
 ?column? 
----------
   -32767
(1 row)

ftian=# select 32768::int2;                                                                                                                                                                   
ERROR:  smallint out of range
ftian=# select -32768::int2;
ERROR:  smallint out of range
ftian=# 

Re: Bug with int2

От
Tom Lane
Дата:
Feng Tian <ftian@vitessedata.com> writes:
> I run into the following.   Seems this is a bug for -32768, which should be
> a valid smallint value.

> ftian=# select -32768::int2;
> ERROR:  smallint out of range

You have the wrong idea about the precedence of those operators.
"select (-32768)::int2" works.
        regards, tom lane



Re: Bug with int2

От
Michael Paquier
Дата:
On Wed, Feb 17, 2016 at 12:27 PM, Feng Tian <ftian@vitessedata.com> wrote:
> ftian=# select -32768::int2;
> ERROR:  smallint out of range

But 32768 is not. You should just use parenthesis, a cast does not
take into account the minus sign here:
=# select (-32768)::int2; int2
---------32768
(1 row)
-- 
Michael



Re: Bug with int2

От
Peter Geoghegan
Дата:
On Tue, Feb 16, 2016 at 7:27 PM, Feng Tian <ftian@vitessedata.com> wrote:
> I run into the following.   Seems this is a bug for -32768, which should be
> a valid smallint value.

This isn't a bug. You see the error only due to operator precedence:

postgres=# select (-32768)::int2; int2
─────────-32,768
(1 row)

--
Peter Geoghegan



Re: Bug with int2

От
Feng Tian
Дата:
Ah, thanks!

On Tue, Feb 16, 2016 at 7:54 PM, Peter Geoghegan <pg@heroku.com> wrote:
On Tue, Feb 16, 2016 at 7:27 PM, Feng Tian <ftian@vitessedata.com> wrote:
> I run into the following.   Seems this is a bug for -32768, which should be
> a valid smallint value.

This isn't a bug. You see the error only due to operator precedence:

postgres=# select (-32768)::int2;
  int2
─────────
 -32,768
(1 row)

--
Peter Geoghegan