Re: Postgres jdbc driver inconsistent behaviour with double precession
Dave Cramer <davecramer@postgres.rocks>
From: Dave Cramer <davecramer@postgres.rocks>
To: Rahul Uniyal <rahul.uniyal00@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2024-03-18T20:18:08Z
Lists: pgsql-bugs
On Sat, 16 Mar 2024 at 15:30, Rahul Uniyal <rahul.uniyal00@gmail.com> wrote: > > Hello Team, > > Hope everyone is doing well here. > > I am writing this email to understand an issue I'm facing when fetching > data in our Java application. We are using PostgreSQL JDBC Driver version > 42.6.0. > > Issue: > > We are encountering an issue where the double precision data type in > PostgreSQL is giving some intermittent results when fetching data. For > example, in the database the value is 40, but sometimes this value is > fetched as 40.0. Similarly, for a value of 0.0005, it is being fetched as > 0.00050, resulting in extra trailing zeros. > > While debugging, it seems like this issue is caused by the different data > formats, such as Text and Binary. There is some logic in the PgResultSet > class that converts values based on this data format. > > Example: > > Below is an example where we are getting different data formats for the > same table: > > Text Format: [Field(id,FLOAT8,8,T), Field(client_id,FLOAT8,8,T), > Field(create_ts,TIMESTAMP,8,T), ...] > > Binary Format: [Field(id,FLOAT8,8,B), Field(client_id,FLOAT8,8,B), ...] > (notice some format changes) > > We are not sure why different formats are coming for the same table. > > Schema: > > Below is the schema for the table used: > > SQL > > > > CREATE TABLE IF NOT EXISTS SUBMISSION_QUEUE( > ID DOUBLE PRECISION, > CLIENT_ID DOUBLE PRECISION, > OCODE VARCHAR(20) NOT NULL, > PAYLOAD_TYPE VARCHAR(20), > REPOSITORY VARCHAR(16), > SUB_REPOSITORY VARCHAR(20), > FORCE_GENERATION_FLAG BOOLEAN, > IS_JMX_CALL BOOLEAN, > INSTANCE_ID DOUBLE PRECISION, > CREATE_TS TIMESTAMP(6) NOT NULL, > ); > > > Request: > > Team, would it be possible to give some insight on this issue? Any help > would be greatly appreciated. > As for why. After a prepared statement has been used 5 times we switch to binary. You can disable this using prepareThreshold=0 Can you do me a favour and confirm this is the case for the latest version of the driver? Dave Cramer www.postgres.rocks