Обсуждение: Bug with int2
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=#
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
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
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
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