pgjdbc/pgjdbc GitHub issues and pull requests (mirror)  
help / color / mirror / Atom feed
From: desruisseaux (@desruisseaux) <[email protected]>
To: pgjdbc/pgjdbc <[email protected]>
Subject: Re: [pgjdbc/pgjdbc] issue #3685: Regression: a query does not work anymore on connection created by `PGSimpleDataSource` but still work with `DriverManager`
Date: Tue, 24 Jun 2025 13:32:01 +0000
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>

Below are the logs from the JDBC driver. For making comparison easier, I removed all values that vary at each execution (timestamp, hash codes in `toString()`, PID) and formatted the remaining as a table. I also removed the ordinary query for focussing on the error.

## When using `DriverManager`
```
Driver.loadDefaultProperties            : Loading driver configuration via classloader jdk.internal.loader.ClassLoaders$AppClassLoader
PgPassParser.findPgPasswordResourceName : Value for resource [pgpass] not found
Driver.connect                          : Connecting with URL: jdbc:postgresql://localhost:5432/SpatialMetadataTest
PgConnection.<init>                     : PostgreSQL JDBC Driver 42.7.7
PgConnection.setDefaultFetchSize        :   setDefaultFetchSize = 0
PgConnection.setPrepareThreshold        :   setPrepareThreshold = 5
ConnectionFactoryImpl.openConnectionImpl: Trying to establish a protocol version 3 connection to localhost:5432
Encoding.<init>                         : Creating new Encoding UTF-8 with fastASCIINumbers true
Encoding.<init>                         : Creating new Encoding UTF-8 with fastASCIINumbers true
ConnectionFactoryImpl.tryConnect        : Receive Buffer Size is 65 536
ConnectionFactoryImpl.tryConnect        : Send Buffer Size is 1 313 280
ConnectionFactoryImpl.enableSSL         :  FE=> SSLRequest postgres
ConnectionFactoryImpl.enableSSL         :  <=BE SSLRefused
ConnectionFactoryImpl.sendStartupPacket :  FE=> StartupPacket(user=desruisseaux, database=SpatialMetadataTest, client_encoding=UTF8, DateStyle=ISO, TimeZone=Europe/Paris)
ConnectionFactoryImpl.doAuthentication  :  <=BE AuthenticationOk
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(in_hot_standby = off)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(integer_datetimes = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(TimeZone = Europe/Paris)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(IntervalStyle = postgres)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(is_superuser = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(application_name = )
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(default_transaction_read_only = off)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(scram_iterations = 4096)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(DateStyle = ISO, YMD)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(standard_conforming_strings = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(session_authorization = desruisseaux)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(client_encoding = UTF8)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(server_version = 16.9)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(server_encoding = UTF8)
QueryExecutorImpl.readStartupMessages   :  <=BE BackendKeyData(pid=...,ckey=[B)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.core.SetupQueryRunner$SimpleResultHandler, maxRows=0, fetchSize=0, flags=1 047
QueryExecutorImpl.sendSimpleQuery       :  FE=> SimpleQuery(query="SET application_name = 'PostgreSQL JDBC Driver'")
QueryExecutorImpl.receiveCommandStatus  :  <=BE CommandStatus(SET)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(application_name = PostgreSQL JDBC Driver)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
PgConnection.<init>                     :     types using binary send = TIMESTAMPTZ,NUMERIC,OID_ARRAY,UUID,BYTEA_ARRAY,INT2_ARRAY,INT4_ARRAY,BYTEA,TEXT_ARRAY,TIMETZ,INT8,INT2,INT4,VARCHAR_ARRAY,INT8_ARRAY,POINT,TIMESTAMP,TIME,BOX,FLOAT4,FLOAT8,FLOAT4_ARRAY,FLOAT8_ARRAY
PgConnection.<init>                     :     types using binary receive = TIMESTAMPTZ,NUMERIC,OID_ARRAY,UUID,BYTEA_ARRAY,INT2_ARRAY,INT4_ARRAY,BYTEA,TEXT_ARRAY,TIMETZ,INT8,INT2,INT4,VARCHAR_ARRAY,INT8_ARRAY,POINT,DATE,TIMESTAMP,TIME,BOX,FLOAT4,FLOAT8,FLOAT4_ARRAY,FLOAT8_ARRAY
PgConnection.<init>                     :     integer date/time = true
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.jdbc.PgStatement$StatementResultHandler, maxRows=0, fetchSize=0, flags=17
QueryExecutorImpl.sendParse             :  FE=> Parse(stmt=null,query="SELECT public.ST_EstimatedExtent('features', 'SpatialData', 'geometry')",oids={})
QueryExecutorImpl.sendBind              :  FE=> Bind(stmt=null,portal=null)
QueryExecutorImpl.sendDescribePortal    :  FE=> Describe(portal=null)
QueryExecutorImpl.sendExecute           :  FE=> Execute(portal=null,limit=0)
QueryExecutorImpl.sendSync              :  FE=> Sync
QueryExecutorImpl.processResults        :  <=BE ParseComplete [null]
QueryExecutorImpl.processResults        :  <=BE BindComplete [unnamed]
QueryExecutorImpl.receiveFields         :  <=BE RowDescription(1)
QueryExecutorImpl.receiveFields         :         Field(st_estimatedextent,<unknown:18074>,65,T)
QueryExecutorImpl.processResults        :  <=BE DataRow(len=12)
QueryExecutorImpl.receiveCommandStatus  :  <=BE CommandStatus(SELECT 1)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
PgResultSet.getObject                   :   getObject columnIndex: 1
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.jdbc.PgStatement$StatementResultHandler, maxRows=0, fetchSize=0, flags=17
QueryExecutorImpl.sendParse             :  FE=> Parse(stmt=null,query="SELECT n.nspname = ANY(current_schemas(true)), n.nspname, t.typname FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid WHERE t.oid = $1",oids={23})
QueryExecutorImpl.sendBind              :  FE=> Bind(stmt=null,portal=null,$1=<('18074'::int4)>,type=INT4)
QueryExecutorImpl.sendDescribePortal    :  FE=> Describe(portal=null)
QueryExecutorImpl.sendExecute           :  FE=> Execute(portal=null,limit=0)
QueryExecutorImpl.sendSync              :  FE=> Sync
QueryExecutorImpl.processResults        :  <=BE ParseComplete [null]
QueryExecutorImpl.processResults        :  <=BE BindComplete [unnamed]
QueryExecutorImpl.receiveFields         :  <=BE RowDescription(3)
QueryExecutorImpl.receiveFields         :         Field(?column?,BOOL,1,T)
QueryExecutorImpl.receiveFields         :         Field(nspname,NAME,64,T)
QueryExecutorImpl.receiveFields         :         Field(typname,NAME,64,T)
QueryExecutorImpl.processResults        :  <=BE DataRow(len=12)
QueryExecutorImpl.receiveCommandStatus  :  <=BE CommandStatus(SELECT 1)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
PgResultSet.getBoolean                  :   getBoolean columnIndex: 1
PgResultSet.getString                   :   getString columnIndex: 2
PgResultSet.getString                   :   getString columnIndex: 3
TypeInfoCache.getSQLType                : querying SQL typecode for pg type oid '18 074'
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.jdbc.PgStatement$StatementResultHandler, maxRows=0, fetchSize=0, flags=17
QueryExecutorImpl.sendParse             :  FE=> Parse(stmt=null,query="SELECT typinput='pg_catalog.array_in'::regproc as is_array, typtype, typname, pg_type.oid   FROM pg_catalog.pg_type   LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r           from pg_namespace as ns           join ( select s.r, (current_schemas(false))[s.r] as nspname                    from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r          using ( nspname )        ) as sp     ON sp.nspoid = typnamespace  WHERE pg_type.oid = $1  ORDER BY sp.r, pg_type.oid DESC",oids={20})
QueryExecutorImpl.sendBind              :  FE=> Bind(stmt=null,portal=null,$1=<('18074'::int8)>,type=INT8)
QueryExecutorImpl.sendDescribePortal    :  FE=> Describe(portal=null)
QueryExecutorImpl.sendExecute           :  FE=> Execute(portal=null,limit=0)
QueryExecutorImpl.sendSync              :  FE=> Sync
QueryExecutorImpl.processResults        :  <=BE ParseComplete [null]
QueryExecutorImpl.processResults        :  <=BE BindComplete [unnamed]
QueryExecutorImpl.receiveFields         :  <=BE RowDescription(4)
QueryExecutorImpl.receiveFields         :         Field(is_array,BOOL,1,T)
QueryExecutorImpl.receiveFields         :         Field(typtype,CHAR,1,T)
QueryExecutorImpl.receiveFields         :         Field(typname,NAME,64,T)
QueryExecutorImpl.receiveFields         :         Field(oid,OID,4,T)
QueryExecutorImpl.processResults        :  <=BE DataRow(len=12)
QueryExecutorImpl.receiveCommandStatus  :  <=BE CommandStatus(SELECT 1)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
PgResultSet.getBoolean                  :   getBoolean columnIndex: 1
PgResultSet.getString                   :   getString columnIndex: 2
PgResultSet.getString                   :   getString columnIndex: 1
PgConnection.getObject                  : Constructing object from type=box2d value=<BOX(3 4,3 4)>
QueryExecutorCloseAction.close          :  FE=> Terminate
```

## When uting `PGSimpleDataSource`
```
PgPassParser.findPgPasswordResourceName : Value for resource [pgpass] not found
Driver.connect                          : Connecting with URL: jdbc:postgresql://localhost/SpatialMetadataTest?currentSchema=features
PgConnection.<init>                     : PostgreSQL JDBC Driver 42.7.7
PgConnection.setDefaultFetchSize        :   setDefaultFetchSize = 0
PgConnection.setPrepareThreshold        :   setPrepareThreshold = 5
ConnectionFactoryImpl.openConnectionImpl: Trying to establish a protocol version 3 connection to localhost:5432
ConnectionFactoryImpl.tryConnect        : Receive Buffer Size is 65 536
ConnectionFactoryImpl.tryConnect        : Send Buffer Size is 1 313 280
ConnectionFactoryImpl.enableSSL         :  FE=> SSLRequest postgres
ConnectionFactoryImpl.enableSSL         :  <=BE SSLRefused
ConnectionFactoryImpl.sendStartupPacket :  FE=> StartupPacket(user=desruisseaux, database=SpatialMetadataTest, client_encoding=UTF8, DateStyle=ISO, TimeZone=Europe/Paris, search_path=features)
ConnectionFactoryImpl.doAuthentication  :  <=BE AuthenticationOk
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(in_hot_standby = off)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(integer_datetimes = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(TimeZone = Europe/Paris)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(IntervalStyle = postgres)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(is_superuser = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(application_name = )
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(default_transaction_read_only = off)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(scram_iterations = 4096)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(DateStyle = ISO, YMD)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(standard_conforming_strings = on)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(session_authorization = desruisseaux)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(client_encoding = UTF8)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(server_version = 16.9)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(server_encoding = UTF8)
QueryExecutorImpl.readStartupMessages   :  <=BE BackendKeyData(pid=...,ckey=[B)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.core.SetupQueryRunner$SimpleResultHandler, maxRows=0, fetchSize=0, flags=1 047
QueryExecutorImpl.sendSimpleQuery       :  FE=> SimpleQuery(query="SET application_name = 'PostgreSQL JDBC Driver'")
QueryExecutorImpl.receiveCommandStatus  :  <=BE CommandStatus(SET)
QueryExecutorImpl.receiveParameterStatus:  <=BE ParameterStatus(application_name = PostgreSQL JDBC Driver)
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
PgConnection.<init>                     :     types using binary send = TIMESTAMPTZ,NUMERIC,OID_ARRAY,UUID,BYTEA_ARRAY,INT2_ARRAY,INT4_ARRAY,BYTEA,TEXT_ARRAY,TIMETZ,INT8,INT2,INT4,VARCHAR_ARRAY,INT8_ARRAY,POINT,TIMESTAMP,TIME,BOX,FLOAT4,FLOAT8,FLOAT4_ARRAY,FLOAT8_ARRAY
PgConnection.<init>                     :     types using binary receive = TIMESTAMPTZ,NUMERIC,OID_ARRAY,UUID,BYTEA_ARRAY,INT2_ARRAY,INT4_ARRAY,BYTEA,TEXT_ARRAY,TIMETZ,INT8,INT2,INT4,VARCHAR_ARRAY,INT8_ARRAY,POINT,DATE,TIMESTAMP,TIME,BOX,FLOAT4,FLOAT8,FLOAT4_ARRAY,FLOAT8_ARRAY
PgConnection.<init>                     :     integer date/time = true
BaseDataSource.getConnection            : Created a Non-Pooling DataSource from PostgreSQL JDBC Driver 42.7.7 for null at jdbc:postgresql://localhost/SpatialMetadataTest?currentSchema=features
QueryExecutorImpl.execute               :   simple execute, handler=org.postgresql.jdbc.PgStatement$StatementResultHandler, maxRows=0, fetchSize=0, flags=17
QueryExecutorImpl.sendParse             :  FE=> Parse(stmt=null,query="SELECT public.ST_EstimatedExtent('features', 'SpatialData', 'geometry')",oids={})
QueryExecutorImpl.sendBind              :  FE=> Bind(stmt=null,portal=null)
QueryExecutorImpl.sendDescribePortal    :  FE=> Describe(portal=null)
QueryExecutorImpl.sendExecute           :  FE=> Execute(portal=null,limit=0)
QueryExecutorImpl.sendSync              :  FE=> Sync
QueryExecutorImpl.processResults        :  <=BE ParseComplete [null]
QueryExecutorImpl.processResults        :  <=BE BindComplete [unnamed]
QueryExecutorImpl.receiveFields         :  <=BE RowDescription(1)
QueryExecutorImpl.receiveFields         :         Field(st_estimatedextent,<unknown:18074>,65,T)
QueryExecutorImpl.receiveErrorResponse  :  <=BE ErrorMessage(ERREUR: column "features"."SpatialData"."geometry" must be a geometry or geography
QueryExecutorImpl.receiveRFQ            :  <=BE ReadyForQuery(I)
QueryExecutorImpl.processResults        :  FE marking setPortalDescribed(false) for query SYNC
QueryExecutorCloseAction.close          :  FE=> Terminate
```

## Differences
Lines present with `DriverManager` but not with `PGSimpleDataSource` (ignoring the lines that occur after the error):

```
Driver.loadDefaultProperties : Loading driver configuration via classloader jdk.internal.loader.ClassLoaders$AppClassLoader
Encoding.<init>              : Creating new Encoding UTF-8 with fastASCIINumbers true
Encoding.<init>              : Creating new Encoding UTF-8 with fastASCIINumbers true
```

Lines present with `PGSimpleDataSource` but not with `DriverManager`:
```
BaseDataSource.getConnection           : Created a Non-Pooling DataSource from PostgreSQL JDBC Driver 42.7.7 for null at jdbc:postgresql://localhost/SpatialMetadataTest?currentSchema=features
QueryExecutorImpl.receiveErrorResponse :  <=BE ErrorMessage(ERREUR: column "features"."SpatialData"."geometry" must be a geometry or geography
```

Lines that are different:
```
Driver.connect : Connecting with URL: jdbc:postgresql://localhost:5432/SpatialMetadataTest
Driver.connect : Connecting with URL: jdbc:postgresql://localhost/SpatialMetadataTest?currentSchema=features
```


view thread (12+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: github://pgjdbc/pgjdbc
  Cc: [email protected], [email protected]
  Subject: Re: [pgjdbc/pgjdbc] issue #3685: Regression: a query does not work anymore on connection created by `PGSimpleDataSource` but still work with `DriverManager`
  In-Reply-To: <<[email protected]>>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox