tinyint 拡張機能を使用して Postgres でいくつかのテストを行っていたときに、その範囲に関して驚くべきことに遭遇しました。入力すると、まったく期待していなかっselect -128::tinyint
たメッセージが表示されました。ERROR: tinyint out of range
負の数が正の最大値 (1 バイト整数の場合は 127) よりも 1 大きい (または小さい) 必要があると仮定すると、拡張機能のバグだと思いましたが、拡張されていない数値でこれを試してみると、まったく同じことがわかりました。ハプニング。
select -32768::smallint
→範囲外
select -2147483648::integer
→範囲外
select -9223372036854775808::bigint
→範囲外
数値データ型のドキュメント ( https://www.postgresql.org/docs/current/datatype-numeric.html )を参照すると、これらの数値はすべて可能である必要があります-32767
。なぜこれが起こっているのか、またはこれは他の人々のコピーでも起こるのでしょうか.-2147483647
-9223372036854775807
ubuntu 16.xデスクトップでpostgresql 10とpostgresql 11の両方を使用してみました。