I was looking in the int*in() functions and found some interesting limit behaviours :


* Here, the most negative value is sometimes accepted, sometimes not :

test=> SELECT -2147483648::INTEGER;
ERREUR:  entier en dehors des limites

test=> SELECT '-2147483648'::INTEGER;
    int4
-------------
 -2147483648

* Same for smallint :

test=> SELECT -32768::SMALLINT;
ERREUR:  smallint en dehors des limites

test=> SELECT '-32768'::SMALLINT;
  int2
--------
 -32768
(1 ligne)

* For BIGINT :

test=> SELECT -9223372036854775808::BIGINT;
ERREUR:  bigint en dehors des limites

test=> SELECT '-9223372036854775808'::BIGINT;
         int8
----------------------
 -9223372036854775808
(1 ligne)

Temps : 0,185 ms
test=> SELECT '-000000009223372036854775808'::BIGINT;
ERREUR: la valeur « -000000009223372036854775808 » est en dehors des limites du type bigint

        Interesting, isn't it ?

        I guess it's good to reject -2147483648::INTEGER because this is ugly :

test=> CREATE TABLE foo AS (SELECT '-2147483648'::INTEGER AS x);
test=> SELECT -x FROM foo;
ERREUR:  entier en dehors des limites

        I can make a fix...

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to