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

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

From
Thomas Markus
Date:
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

From
Tom Lane
Date:
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

From
Dave Cramer
Date:


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

From
Thomas Markus
Date:
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