Обсуждение: org.postgresql.util.PSQLException: ERROR: value out of range: underflow

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

org.postgresql.util.PSQLException: ERROR: value out of range: underflow

От
Thomas Markus
Дата:
Hello

a customer got the exception "org.postgresql.util.PSQLException: ERROR: 
value out of range: underflow" without any stacktrace etc.
System is Linux with PG 12.2

Once I got a similar error in Oracle so I checked double values for edge 
cases (see below) but without success. This message is also not part of 
pgjdbc.

Has anyone any idea where this message may originate from? The only used 
datatypes for numbers are bigint, integer and double precision.

Thanks
Thomas

Test:

try (Statement s = c.createStatement()) {
     s.executeUpdate("create table x (x double precision)");
}
try (PreparedStatement p = c.prepareStatement("insert into x (x) values 
(?)")) {

     p.setDouble(1, Double.MIN_VALUE);
     p.executeUpdate();

     p.setDouble(1, -Double.MIN_VALUE);
     p.executeUpdate();

     p.setDouble(1, Double.MIN_NORMAL);
     p.executeUpdate();

     p.setDouble(1, -Double.MIN_NORMAL);
     p.executeUpdate();

     p.setDouble(1, Double.MAX_VALUE);
     p.executeUpdate();

     p.setDouble(1, -Double.MAX_VALUE);
     p.executeUpdate();

     p.setDouble(1, Double.NEGATIVE_INFINITY);
     p.executeUpdate();

     p.setDouble(1, Double.POSITIVE_INFINITY);
     p.executeUpdate();

     p.setDouble(1, Double.NaN);
     p.executeUpdate();

}






Re: org.postgresql.util.PSQLException: ERROR: value out of range: underflow

От
Tom Lane
Дата:
Thomas Markus <t.markus@proventis.net> writes:
> a customer got the exception "org.postgresql.util.PSQLException: ERROR: 
> value out of range: underflow" without any stacktrace etc.

I'd venture that the cause is some server-side double precision
arithmetic that underflowed.  It's not that hard to hit, eg

postgres=# select 1e-200::float8 * 1e-200::float8;
ERROR:  value out of range: underflow

            regards, tom lane



Re: org.postgresql.util.PSQLException: ERROR: value out of range: underflow

От
Dave Cramer
Дата:


On Sun, 6 Feb 2022 at 11:45, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Thomas Markus <t.markus@proventis.net> writes:
> a customer got the exception "org.postgresql.util.PSQLException: ERROR:
> value out of range: underflow" without any stacktrace etc.

I'd venture that the cause is some server-side double precision
arithmetic that underflowed.  It's not that hard to hit, eg

postgres=# select 1e-200::float8 * 1e-200::float8;
ERROR:  value out of range: underflow

                        regards, tom lane
I mistakenly responded privately and OP responded to that.

Turns out a column was added with the wrong type.

Dave

Re: org.postgresql.util.PSQLException: ERROR: value out of range: underflow

От
Thomas Markus
Дата:
Am 06.02.22 um 17:45 schrieb Tom Lane:
> Thomas Markus <t.markus@proventis.net> writes:
>> a customer got the exception "org.postgresql.util.PSQLException: ERROR:
>> value out of range: underflow" without any stacktrace etc.
> I'd venture that the cause is some server-side double precision
> arithmetic that underflowed.  It's not that hard to hit, eg
>
> postgres=# select 1e-200::float8 * 1e-200::float8;
> ERROR:  value out of range: underflow
>
>             regards, tom lane
>
>
Dave answered private here:

A double in java cant hold such big numbers. In fits fine in float8
Here one of our developers added a float4 column manually instead of 
float8. With float4 its easy to force that error.

regards
Thomas